Обнаружение обработчиков события jQuery "Live" - PullRequest
2 голосов
/ 22 мая 2010

Использование:

$('#foo').data('events').click

Мы можем получить доступ к итеративному объекту обработчиков кликов, добавленных к элементу '#foo', но только тогда, когда они были добавлены с помощью .bind ()

Есть ли способ получить обработчики для события, добавленного с помощью .live ()?

Есть ли другой способ узнать, назначен ли элемент обработчику щелчка?

1 Ответ

3 голосов
/ 22 мая 2010

live события добавлены в документ.Используйте

$(document).data('events').click

. Выше будет возвращен массив объектов, содержащий информацию о каждом связанном обработчике кликов.Каждый из этих объектов имеет свойство selector, содержащее селектор, который использовался во время привязки с $(selector).live(.., ..).

. Любой из этих селекторов, который соответствует элементу с идентификатором foo, будет запущен, когда #fooнажата.Обратите внимание, что селектор не должен быть точно #foo, чтобы это произошло.Есть много других селекторов, которые можно использовать для нацеливания на элемент.Например, если #foo было <p>, то обработчик живого клика, такой как

$("p").live("click", function..)

, также будет нацелен на #foo.

Вот один из подходов.Проходите по каждому объекту и смотрите, содержит ли какой-либо из элементов, соответствующих свойству selector, #foo.

var handlers = $(document).data('events').click;

// jQuery quirk: $.map callback takes arguments (obj, index) and
// $(..).map takes callback arguments as (index, obj)
var fooClickHandlers = $.map(handlers, function(handler) {
    if($(handler.selector).is('#foo')) {
        return handler;
    }
    return null;
});

// fooClickHandlers is a list of all handlers that will fire on #foo click
...