.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 つまたは 2 つの行を追加してから、最初の選択以外を変更します。
それらが変更されると、コンソールは正しい対応する番号を表示します。
さらにいくつかの行を追加し、それらの新しい選択を変更します。
すべて問題ありませんが、最初の選択を変更し、さらに行を追加してから、最新の選択を変更します。
最新の行が最初の行であると見なされるように、コンソールには常に 1 が表示されるようになりました。
ここで何が欠けていますか?