2012-10-01 130 views
2

我的页面上有一个动态表,用户可以从中添加行/删除行。假设用户增加了6个人。第一个名字数组是这样的:HTML表追加,JQuery数组

Index: 0 1 2 3 4 5 
Person#: 1 2 3 4 5 6 

然后假设用户删除了前三排,所以后来名字排列是这样的:

Index: 0 1 2 3 4 5 
Person#:    4 5 6 

最后,用户将三个人,阵列会是这样的:

Index: 0 1 2 3 4 5 
Person#:    7 8 9 

这就是我遇到的问题。当删除行,我怎么了jQuery阵列适当移动,使得不是这样看:

Index: 0 1 2 3 4 5 
Person#:    4 5 6 

它会是这样的:

Index: 0 1 2 3 4 5 
Person#: 4 5 6 

这里是我的代码工作的例子: demo
我需要在我的代码中添加/更改以解决问题?

回答

2

我通常简单地重新编号属性值。事情是这样的:

$("#table").find('tr').each(function(index, element) 
{ 
    var row = $(this); 

    index --; 

    var names = ['fname_new', 'lname_new', 'phone_new', 'email_new', 'ethnicity_new']; 
    for(var i in names) 
    { 
     row.find('input[name^="' + names[i] + '"]').attr('name', '' + names[i] + '[' + index + ']'); 
    } 
}); 

http://jsbin.com/icutuj/3/edit

+0

不幸的是这没有奏效。它仍然做了我上面所描述的 –

+0

我们在谈论不同的事情吗?它对我来说工作得很好:http://jsbin.com/icutuj/8/edit(在添加/删除行后点击序列化按钮) – ndm

+0

+1是的,它确实有效。比我的解决方案效果更好... – hagensoft

1

我不是试图修复索引,而是创建一个隐藏变量,让我们将其称为索引,并且每次向索引++添加新行时。

然后,当数据被调回你可以有这样的事情快伪代码:

for (int i = 0; i++ i<$index) { 
    var person = $POST[person_$index]; 
    if (person != null) { 
    //do something 
    } 
} 

这样,你真的不关心他们多少条记录删除。

干杯!

1

也许不是最好的解决方案,但是我通过消隐行值,然后更改hide()的delete()来消除这个问题。并没有保持行数。希望有更好的解决方案。

$('div#editPhoneDlg').delegate('a.remove[href^=#]', 'click', function() { 

     var row = $(this).parent().parent(); 
     if (rowCount > 1) { 
      var name = $(row).find('td.name input'); 
      name.val(''); 
      var address = $(row).find('td.address input'); 
      address.val(''); 
      var phone = $(row).find('td.phone input'); 
      phone.val(''); 
      row.hide(); 
     } 
     else { 
      var name = $(row).find('td.name input'); 
      name.val(''); 
      var address = $(row).find('td.address input'); 
      address.val(''); 
      var phone = $(row).find('td.phone input'); 
      phone.val(''); 
     } 
     return false; 
    });