Как проверить, установлен ли JavaScript-Eventhandler?
У меня есть JavaScript-функция, которая устанавливает "onclick" -венти некоторых HTML-узлов, даже если этот параметр "onclick" -event был установлен ранее.
Как я могу проверить, было ли это событие уже настроено, поэтому я могу расширить свою функцию, чтобы установить событие только на узлах HTML, где он еще не был установлен?
Ответы
Ответ 1
Проверьте, например:
if(typeof someNode.onclick == "function") {
// someNode has an event handler already set for the onclick event...
}
Кстати, если вы используете библиотеку, вы должны сказать так: если это так, это может быть проще/чище и будет отличаться в зависимости от того, какую библиотеку вы используете...
Ответ 2
Должна быть доступна возможность обнаружения обработчиков событий с помощью <element>.addEventListener()
путем перехвата вызовов функции:
var myListOfAddedEvents = [];
var realAddEventListener = HTMLElement.prototype.addEventListener;
HTMLElement.prototype.addEventListener = function(evtType,fn,cap) {
myListOfAddedEvents.push(
{on: this, type: evtType, handler: fn, capture: cap}
);
return realAddEventListener.apply(this, arguments);
};
Примечание. Это непроверенный код и может потребоваться некоторая работа. Я надеюсь, что эта же функция будет использоваться всеми типами элементов, но я могу ошибаться. Также он будет работать только в том случае, если вы можете запустить этот бит кода, прежде чем они начнут добавлять события. Копия для attachEvent может быть построена аналогично.
Ответ 3
<input type="button" id="foo" name="foo" value="bar" />
<script type="text/javascript">
alert(document.getElementById('foo').onclick); //undefined
</script>
Итак, что вы хотите сделать, это примерно так:
<script type="text/javascript">
if (undefined == document.getElementById('foo').onclick)
{
// Add event handler
}
</script>
Ответ 4
другая альтернатива, добавив класс к элементу
if(!elem.class.match('hasEvent'))
{
elem.addEventListener(event, function(){});
elem.className = elem.className + ' hasEvent';
}