我有一个表,它动态生成具有多个输入的行,这些输入需要唯一的ID和名称。我在jQuery验证器中编写了一个submitHandler函数来处理这个问题,但我遇到了两个问题:
这是我的代码:
var accessorylist = document.getElementById("accessorybody");
var i = 1;
$("tr").each(function(){
var e = this;
$('select').attr({
'id': 'accessory' + i,
'name': 'accessory' + i
});
$('input[type=checkbox]').attr({
'id': 'accessoryrequired' + i,
'name': 'accessoryrequired' + i
});
$('input[type=text]').attr({
'id':'accessoryqty' + i,
'name': 'accessoryqty' + i
});
alert(e);
i++;
alert(i);
});
alert(accessorylist);
return false;
警报和返回false只是我的调试行。我非常肯定第二个答案我需要指定我的输入只关注行(e),但我尝试了几个不起作用的东西,我有点难过。至于标题行,它包含在thead标记中; 'accessorybody'是一个tbody标签,只包含我的数据行,所以我不知道它是如何或为什么被包含在我的循环中。
答案 0 :(得分:1)
您可以通过检查tr
的内容来跳过对标题行的迭代,例如:
if (!$(this).has('th').length) {
// run code
}
或者您可以更改循环,以便它只会循环遍历不包含<th>
的行
$('tr:not(:has(th))').each(function() {
// run code
});
为了解决您的第二个问题,您只需要为选择器提供一个上下文:
$('select', this);
这样,只会影响当前行中的元素。
答案 1 :(得分:1)
1)使用:not
和:first
jQuery选择器跳过第一行
$("tr:not(:first)").each(function(){ ... });
2)使用this
作为jQuery对象,使用行($this
)作为上下文来查找输入元素
var $this = $(this);
...
$this.find('select').attr({ ... })
$this.find('input[type=checkbox]').attr({ ... })
$this.find('input[type=text]').attr({ ... })
...
答案 2 :(得分:0)
使用th标签,或者在标题行中输入id,以便跳过它,或者只跳过第一行......
使用.children()函数,而不是全局选择器。
Ex:this.children('select')。attr(...