1

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 = 4id = 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にパラメーターが渡されます。関数のスコープをなんらかの方法でだますことができない限り、これを修正する方法がわかりませんか?

4

1 に答える 1

2

引数には、次のようなevent.dataオブジェクトからアクセスできます。

dynamo.awards.tooltip.ini(e.data.c, e.data.i);

http://api.jquery.com/bind/#passing-event-data

于 2012-08-12T22:20:10.657 に答える