我已经阅读了.on文档,但其中有一个漏洞
以下是HTML代码:
<a href="#" class="add-new">make new row</a>
<ul>
<li class="opts" >
<select class="change" href="#" data-row="1">
<option>a</option>
<option>b</option>
<option>c</option>
</select>
</li>
</ul>
这是 JavaScript 代码:
var index = 2;
$('.add-new').on('click',function(e) {
e.preventDefault();
$('.opts:first').clone(true).insertAfter('.opts:last');
$('.opts:last select').attr("data-row", index);
index++;
});
$(document).on('click', '.change', function(e) {
e.preventDefault();
console.log($(this).data('row'));
});
如果我动态生成行,新元素就可以与.on事件配合使用。
但如果更改第一个元素并添加更多的新元素,则新的元素会触发事件。
现在它们表现得好像是第一个元素一样。
这里有一个例子:http://jsfiddle.net/BgAsY/2/
添加一或两行,然后更改除第一个选择外的任何一个选择。
当这些被更改时,控制台显示正确的相应数字。
现在再添加几行并更改这些新的选择。
一切都还好,但现在要更改第一个选择,添加更多行,然后更改那些最新的选择。
控制台现在总是显示1,好像它认为这些最新的行是第一行一样。
我在这里错过了什么?