Список всех текущих событий в jQuery

#javascript #jquery

#javascript #jquery

Вопрос:

Как я мог бы найти в jQuery, какие события связаны с live для определенного элемента?

Допустим, у меня есть функция, randomFunction , которая возвращает случайную функцию из массива функций. Как я могу найти, какая функция была привязана к определенному элементу?

 var arrayOfFunctions = []; //a whole bunch of functions
function randomFunction(array){}; //returns one of those functions
$('#certain_element').live('click', randomFunction(arrayOfFunctions));
  

Какой индекс массива соответствует функции, которая была привязана с помощью live for $('#certain_element') ?

Ответ №1:

Хорошо, разобрался. Для click события, для $('#certain_element') регистрации индекса каждой привязки в консоли:

 var relevantHandlers = $.map($(document).data('events').live, function(value){
  if(value.origType == 'click' amp;amp; value.selector == '#certain_element'){
    return value.handler;
  }
}; //all handlers for #certain_element bound to click by live.
$.each(relevantHandlers, function(){
  console.log("the index is: "   $.inArray(this, arrayOfFunctions));
});
  

Ответ №2:

Взгляните на этот плагин. Когда я в последний раз использовал это, возникла необходимость слегка модифицировать его для последней на тот момент версии jQuery, но это должно дать вам направление.

Комментарии:

1. Это будет обрабатывать обычные события, связанные с .click или .bind , но не .live

Ответ №3:

Есть отличный букмарклет под названием Visual Event, который показывает код, который будет вызван.

Но поскольку вы действительно вызываете случайную функцию, возможно, сделайте что-нибудь столь же простое, как включение оповещения («имя функции») или colsone.log («функция»), если вы просто тестируете.

Комментарии:

1. аккуратный букмарклет, но для live привязок он выделяет весь документ, но не предоставляет информации о том, какой должна быть цель события, чтобы его запустить.

2. Ах, это имеет смысл… событие .live() всплывает до корневого элемента перед . вызывается триггер live. Я думал, что смог увидеть визуальное событие в теге <a> с привязкой .live(), но оказывается, я прикрепил delegate() к <ul>, в котором были привязки. Это сработало.