1

迅速でおそらくばかげた質問。次の状況があります。複数の要素を選択し、クリックハンドラーをそれらにバインドします。それらがクリックされた後、ハンドラーを削除し、それらすべてからクリックのバインドを解除したいと思います。$(this)常に実際にクリックされた要素を参照するため$(this)、クリックされた要素からのみクリックハンドラーを削除します。イベントをバインドするすべてのセレクターからは削除しません。

$(modal + ' .modal-close, ' + modal + ' a.cancel_link, ' + modal + ' .okBtn').bind('click', function(e) {
        e.preventDefault();
        ...
        //$(this).unbind('click');
        $(modal + ' .modal-close, ' + modal + ' a.cancel_link, ' + modal + ' .okBtn').unbind('click');
});

奇妙な質問はです。これを行うためのより良い方法はありますか、それともすべてのセレクターからクリックをアンバインドするために関数内のすべてのセレクターを繰り返す必要がありますか?以前に変数を宣言できることは知っていますが、$(this-all):)のようなものはありますか

4

2 に答える 2

1

クロージャーで最初のjQueryオブジェクトをキャプチャできます。

var $all = $(modal + ' .modal-close, ' + modal + ' a.cancel_link, '
    + modal + ' .okBtn');
$all.click(function(e) {
    e.preventDefault();
    // ...
    $all.unbind("click");
});
于 2011-07-24T16:31:26.560 に答える
1

あなたが言ったように、変数を宣言することはおそらくあなたの最善の策です。

$(this-all)クリックイベントは、そのイベントをバインドしたときに使用した特定のセレクターを認識しないため、多くの状況では意味がありません。実行する要素と関数を認識しているだけです。

あなたがしていることを行うためのより良い方法があることに注意してください。セレクターを1つずつ作成するのではなく、この.find()メソッドを使用して、選択した要素の祖先を見つけることができます。

var $modal = $(modal); // assuming `modal` is a string
var $elems = $modal.find('.modal-close, a.cancel_link, .okBtn'); // hyphens, underscores, and camelCase -- oh my!
$elems.click(...);
于 2011-07-24T16:38:43.923 に答える