Как я могу проверить, был ли установлен JavaScript-обработчик событий? - PullRequest
15 голосов
/ 10 июня 2009

У меня есть JavaScript-функция, которая устанавливает событие onclick для некоторых узлов HTML, даже если это событие onclick было установлено ранее.

Как я могу проверить, было ли это событие уже установлено, чтобы я мог расширить свою функцию, чтобы установить событие только на узлах HTML, где оно еще не установлено?

Ответы [ 4 ]

10 голосов
/ 10 июня 2009

Проверьте, вот так:

if(typeof someNode.onclick == "function") {
   // someNode has an event handler already set for the onclick event...
}

Кстати, если вы используете библиотеку, вы должны сказать об этом - если это так, это может быть проще / чище и будет отличаться в зависимости от того, какую библиотеку вы используете ...

7 голосов
/ 26 января 2011

Должна быть возможность обнаруживать обработчики событий, подключенные с использованием <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 может быть создана аналогично.

1 голос
/ 10 июня 2009
<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>
0 голосов
/ 20 января 2017

другая альтернатива, добавление класса к элементу

if(!elem.class.match('hasEvent'))
{
  elem.addEventListener(event, function(){});
  elem.className = elem.className + ' hasEvent';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...