0

ウェブサイトにアンカーがあります。誰かがそれをクリックすると、jqueryでsmthを実行して名前を変更しますが、もう一度クリックすると、名前を変更したにもかかわらず、イベントが発生します。ここにコード:

$(".like_cont a[name=like]").click(function (e) {
                alert("W");
                var t = $(this);

                t.find("img").attr("src", "images/like_icon.png");

                var ls = parseInt(t.next().next()) + 1;
                t.next().next().text(ls);

                var params = "Like|" + t.attr("lik");
                CallServer(params, "");

                t.attr("name", "liked");
                e.preventDefault();
            });

クリックname高く評価された後、別のクリックイベントが発生します。発砲を維持するためにセレクターを変更するにはどうすればよいですか?

4

2 に答える 2

1

.off()Iridioの回答に従って、呼び出してイベントハンドラーを削除できます。

または、委任されたイベント処理モデルを使用できます。

$(".like_cont").on("click", "a[name=like]", function (e) {
    ...
});

これは、クリック(および他のほとんどの)イベントがソース要素からそれらを含むすべての要素を介してバブルアップするという事実に依存しています。したがって、この構文でバインドされたハンドラーを使用すると、.on()(この例では)要素をクリックするたびに".like_cont"、jQueryはイベントのソース要素をテストして、2番目のパラメーターのセレクターと一致するかどうかを確認します。一致する"a[name=like]"場合は、関数が呼び出され、そうでない場合は呼び出されません。

つまり、委任された処理モデルでは、クリックされた要素がイベントの発生時に2番目のパラメーターのセレクターと一致する場合にのみ関数が呼び出されます。

.click()でバインドされた、またはその2番目のパラメーター.on() なしでバインドされた「標準」ハンドラーを使用すると、イベントは、イベントがバインドされたときにセレクターと一致した要素に直接バインドされます。イベントの時間。(それは悪いことではありません-時々それはあなたが必要としているものであり、あなたの現在の場合ではありません。)

于 2012-08-12T11:24:14.943 に答える
1

考えられる1つの方法は、.off()を呼び出して、オブジェクトからクリックイベントを削除することです。

于 2012-08-12T10:18:54.603 に答える