click
イベントオブジェクトを含む引数をその場で渡すことができる間、イベントをDOMの要素にバインドすることを使用する必要があります。私の現在のスクリプトは以下を使用しています:
var counter = 1;
$(".dynamo_user_info .dynamo_awards").each(function(){
$(this).find("~ div a").each(function(){
var id = $(this).attr("rel").split("aid-")[1];
$(this).attr("id","dynamo_award-"+counter+"-"+id).bind('click',{c:counter,i:id},function(e){
e.returnValue = e.preventDefault && e.preventDefault() ? false : false;
dynamo.awards.tooltip.ini(c,i);
});
});
counter++;
});
ご覧のcounter
とおり、反復ごとに増加しid
、静的な値を保持していません。各反復後の最終的な値は次のとおりです。 counter = 4
、id = 2
。これで、これらの要素の1つがクリックされるたびにpreventDefaults
、必要に応じて実行されますdynamo.awards.tooltip.ini(c,i);
。
ただし、これは意図したとおりに機能しません。実行する代わりに:
dynamo.awards.tooltip.ini(1,1);
dynamo.awards.tooltip.ini(2,6);
など(たとえば)、代わりに実行されます:
dynamo.awards.tooltip.ini(4,2);
dynamo.awards.tooltip.ini(4,2);
つまり、との最後に保存された値を使用しcounter
ますid
。私の推測では、これはどのように機能するかによって行われ、要素がクリックされる前ではなく、クリックされたときbind
にパラメーターが渡されます。関数のスコープをなんらかの方法でだますことができない限り、これを修正する方法がわかりませんか?