2010-10-11 7 views

ответ

3

Невозможно сделать это напрямую с помощью javascript.

JQuery имеет несколько функций для отслеживания этих данных.

Один «чистый» способ сделать это - изменить функцию addEventListener/attachEvent с помощью прототипирования (поиск про материал прототипа javascript, а не фреймворк).

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

Ну, вот и все.

+0

Я использую пользовательскую функцию addEvents (handle ie и т. Д.). Есть ли способ сохранить все события (имена и функции), добавленные к элементу? – errorhandler

+0

Привет, обработчик ошибок, я подозреваю, что вы использовали настраиваемую функцию для обработки IE addEvent. Ну, я думаю, вы можете настроить эту функцию, добавив к глобальному var/object с данными о событиях - целевым элементом, целевым событием, и функцию обратного вызова, а затем в этом пользовательском var/object добавьте некоторые функции для извлечения необходимых данных. – Dave

2

Конечно! Взгляните на это, чтобы связать/UNBIND события http://api.jquery.com/category/events/ и использовать этот фрагмент кода JQuery, чтобы получить все события, связанные с элементом в виде HashSet из пары ключей «EventName/функции делегата»

jQuery(elem).data('events'); 
+0

Это работает, только если вы уже используете jQuery. –

+0

есть ли способ сделать это без jQuery? – errorhandler

+0

Ну, afaik все, что нужно, это включить API jQuery. Этот кусок кода должен работать также и для событий, не связанных непосредственно с jQuery. – NinjaCross

3

Если вы не хотите использовать jQuery, быстрый и грязный способ (и там будет лучше), нужно будет прокрутить параметры элемента и проверить функции, начинающиеся с «on» (onclick и т. Д.).

var el = document.getElementById('elementid') ; 
el.onclick = function(e) { console.log('Clicked!') ; } ; // Attached test event. 
if(typeof(el)=='object') { 
    for(var i in el) { 
     if(i.substr(0,2) == 'on' && typeof(el[i])=='function') { 
     el[i] = function() {} ; // Unbind with null function. 
     } 
    } 
} 
+0

спасибо, я дам ему попробовать – errorhandler

+1

не работает для меня :( – errorhandler