Получить значение текущего обработчика события, используя jQuery
Я могу установить обработчик onclick с помощью jQuery, вызвав
$('#id').click(function(){
console.log('click!');
});
Также, используя jQuery, как я могу получить ссылку на функцию, которая в настоящее время обрабатывает событие click()?
Причина в том, что у меня есть другой объект, и я хочу установить его обработчик кликов на тот же, что и #id.
Обновить
Спасибо за все предложения. Проблема в том, что я не знаю, какая функция в настоящее время обрабатывает клики. Отслеживание этого добавило бы состояние к уже сложной системе редактирования шаблонов.
2 ответа
JQuery-х .click(function)
метод добавляет функцию в очередь, которая выполняется по событию click~
Так что на самом деле вытащить ссылку на данную функцию, вероятно, будет гораздо сложнее, чем вы ожидаете.
Как отмечают другие, было бы лучше передать ссылку на функцию; и тогда у вас уже есть ссылка, в которой вы нуждаетесь.
var clicky = function () { /* do stuff */ };
$('#id').click(clicky);
// Do other stuff with clicky
Обновить
Если вам действительно нужно получить его, попробуйте это:
jQuery._data(document.getElementById('id')).events.click[0].handler
В зависимости от вашей версии jQuery, которая может или не может работать ~ Попробуйте поиграть с
jQuery._data(document.getElementById('id'))
и посмотрим, что вы получите.
Получил идею из этого раздела источника:
https://github.com/jquery/jquery/blob/master/src/event.js#LC36
если вы не знаете название функции, которую вы можете использовать
args.callee
https://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope/arguments/callee
function clickHandle(e){
if($(e.target) == $('#id')) {
$(newTarget).bind('click', clickHandle);
}
}
$('#id').bind('click',clickHandle);
Я думаю, что это был бы самый символический способ сделать это