Проверьте, связан ли обработчик событий с элементом в jQuery методом делегата () - PullRequest
0 голосов
/ 01 февраля 2012

У меня есть вопрос, похожий на этот , однако есть одно важное отличие.Метод, представленный в принятом ответе, корректно работает с «напрямую» связанными событиями.Он не дает результатов, если обработчики назначены методом delegate.Например:

$("#some-element").delegate(".some-class", "click", function () {
  alert("Click!");
});

После того, как элементы с классом some-class сгенерированы и вставлены в html, есть ли способ проверить, связан ли с ними обработчик событий click?

РЕДАКТИРОВАТЬ: Согласно комментарию @ Pointy я исправлю вопрос выше, так как обработчик не будет привязан к .some-class:

Есть ли способ проверить, еслиэлемент, представленный, например, объектом jQuery (в этом примере это может быть $(".some-class")), если щелкнуть по нему, вызовет обработчик?

1 Ответ

1 голос
/ 01 февраля 2012

Как указано Pointy , события всплывают, и к корневому элементу привязан единственный «главный» обработчик событий, который проверяет, имеет ли элемент, который первоначально получил щелчок, предоставленный вами класс, если онда, ваш обратный вызов будет вызван.

Поэтому, чтобы проверить, будет ли ваш обратный вызов вызываться для элемента, все, что вам нужно сделать, это проверить, находится ли элемент в списке, предоставленном селектором $("#some-element .some-class");

Так что-то вроде этого должно работать (не проверял):

var testEl = elementYouWantToTestAgainst;
if ($("#some-element .some-class").is(testEl)) {
    //It is "bound"
}

Или другое решение, которое делает то же самое;

//Which should do something like this:  
var els = $("#some-element .some-class");
els.each(function() {
    if (this === testEl) {
        //It is "bound"
    }
});

Что касается отладочных событийЯ обычно просто добавляю console.log("Event fubar fired!"); к обработчикам.

...