#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>, в котором были привязки. Это сработало.