Получить значение текущего обработчика события, используя 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);

Я думаю, что это был бы самый символический способ сделать это

Другие вопросы по тегам