次のようにループ内に多数のオブジェクトを作成すると、次のようになります。
for(var i = 0; i < 5; i++)
{
var data = { val: i * 2 };
var obj = $('<li>Item</li>');
$("ul").append(obj);
obj.click(function()
{
alert(data.val);
// Output is 8 for all items.
});
}
ハンドラー内で最後に作成されたdata
オブジェクトにのみアクセスできます。.click()
data
ハンドラー内の関連オブジェクト(クリックされているjQueryオブジェクトと同時に作成されたオブジェクト)を参照するにはどうすればよいですか?
.attr()
これまでは、個別のオブジェクトではなく、データを保持するためにjQueryオブジェクトにランダムな属性を割り当てることでこれを回避できましたが、そのアプローチから離れたいと思います。
私もこれを試しましたが、運がありませんでした:
var data = { val: i * 2 };
var obj = $('<li>Item</li>');
obj.data = data;
obj.click(function()
{
// 'data' is undefined here i.e. not associated with $(this).
alert($(this).data.val);
});