JQuery: несколько селекторов - открепить клик от всех селекторов с $ (это)? - PullRequest
1 голос
/ 24 июля 2011

быстрый и, вероятно, тупой вопрос.У меня следующая ситуация: я выбираю несколько элементов и привязываю к ним обработчик кликов.После того, как они нажали, я хочу удалить обработчик и открепить клик от всех из них.$(this) всегда относится к элементу, который фактически нажат, поэтому $(this) удаляет обработчик щелчка только из элемента, по которому щелкают, а не из всех селекторов, с которыми я связываю событие.вопрос есть.Есть ли лучший способ для этого или мне нужно повторить все селекторы в функции, чтобы отменить щелчок от всех селекторов?Я знаю, что мог объявить переменную раньше, но есть ли что-нибудь вроде $(this-all):)

Ответы [ 2 ]

1 голос
/ 24 июля 2011

Объявление переменной, как вы сказали, является, вероятно, вашим лучшим выбором.

$(this-all) не имеет смысла во многих ситуациях, потому что событие щелчка не знает конкретного селектора, который вы использовали при привязке этого события, оно просто знает элемент и функцию для выполнения.

Обратите внимание, что есть более аккуратный способ делать то, что вы делаете. Вместо того, чтобы строить селектор по частям, вы можете использовать метод .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(...);
1 голос
/ 24 июля 2011

Вы можете захватить исходный объект jQuery в замыкании:

var $all = $(modal + ' .modal-close, ' + modal + ' a.cancel_link, '
    + modal + ' .okBtn');
$all.click(function(e) {
    e.preventDefault();
    // ...
    $all.unbind("click");
});
...