Подтвердить что ты не робот

Список всех привязок элемента (с jQuery)

Есть ли способ перечислить все привязки для элемента jQuery? jQuery bind(), похоже, только присоединяет их, и я не нашел функцию jQuery, которая получает привязки.

4b9b3361

Ответ 1

Этот ответ относится к версии jQuery < 1,8

Лучший способ сделать это, возможно, плагин FireQuery для FireFox. Действительно аккуратный инструмент.

Если вам нужно/нужно выполнить этот "in-code", используйте объект jQuerys .data('events').

$.each($('#element').data('events'), function(i, e) {
    console.log(i, e);
});

Все события, связанные с jQuery, попадают в этот объект. Конечно, могут быть и другие обработчики событий, такие как on -anything, для которых вам придется явно проверять.

Ref.: FireQuery

Ответ 2

Как и в jQuery 1.8, новый синтаксис:

$.each($._data("#element", "events"), function(i, e) {
console.log(i, e);
});

Обратите внимание, что это $._data("#element" NOT $.data($("#element"), поэтому обязательно разверните селектор, если вам нужно использовать $myJQuerySelector[0].

Подробнее...

Ответ 3

Должен быть способ сделать это программно, и кто-то его понял и поместил в визуальный инструмент.

Я не уверен, отвечает ли это на ваш вопрос, но я нашел лучший инструмент для определения этих привязок, называется Visual Event ( не очень хорошее имя, очень сложно Google на самом деле).

Это работает в Firefox и Chrome, Chromium, Safari и т.д. Некоторые проблемы с привязанностью могут возникать по-разному в разных браузерах. Хорошо охватывать все базы.

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

alt text

Ответ 4

Основываясь на других ответах и ​​комментариях.

JQuery 1.8 и выше

var elementSelector = '#element-id';

$(elementSelector).bind('click.test', function(){}); // For testing.

$.each($._data($(elementSelector)[0], 'events'), function(i, e) {
    console.log(i, e);
});

Первый аргумент $._data() не является объектом jquery.

Обратите внимание, что это не поддерживается. Интерфейс; фактические структуры данных могут изменяться несовместимо с версия для версии. - Jquery 1.8 Realeased


Ниже JQuery 1.8

var elementSelector = '#elementid';

$(elementSelector).bind('click.test', function(){}); // For testing.

$.each($(elementSelector).data('events'), function(i, e) {
    console.log(i, e);
});

В версии 1.6 jQuery отделил свои внутренние данные от пользователей данных для предотвращения конфликтов имен. Однако некоторые люди использовали внутренняя недокументированная структура данных событий, поэтому мы сделали возможным чтобы получить это через .data(). Это удалено в 1.8.- JQuery 1.8 Развернутый

Ответ 5

Следующий код рассматривает элемент и все его дочерние элементы и console.logs любые связанные события.

function findMyEvents(me) {

    if (typeof $._data($(me)[0], 'events') !== "undefined") {
        console.log($(me)[0])
        console.log($._data($(me)[0], 'events'))
        $._data($(me)[0], 'events')
    };
    for (var i = 0; i < $(me).children().length; i++) {
        findMyEvents($(me).children()[i])
    }
}

findMyEvents('body')

Ответ 6

Я не могу заставить работу Grinn ответить. Из jQuery 1.8 найдите обработчики событий, я думаю, что этот пример следует изменить на

var obj = $('#element');
$.each($._data(obj[0], "events"), function(i, e) {
console.log(i, e);
});