Возвращение обработчика события возвращает неопределенное - PullRequest
1 голос
/ 09 августа 2010

Следующие коды не работают:

function dnd(){
}
var ele = document.getElementById("relative");
ele.addEventListener("click",dnd,false);
document.write(ele.onclick);

вывод undefined. Я думаю, что вывод должен быть function onclick(event){dnd();}

Что я должен сделать, чтобы решить эту проблему?

Любое предложение приветствуется.

Ответы [ 4 ]

2 голосов
/ 09 августа 2010

Существует 3 распространенных способа прикрепления событий к узлам DOM.

Метод addEventListener() - это способ регистрации прослушивателя событий, как указано в W3C DOM. Он имеет много преимуществ, но не работает в Internet Explorer. Для Internet Explorer вам придется использовать метод attachEvent(), который предлагает аналогичные функции.

С другой стороны, свойство onclick является более старым, но более поддерживаемым способом подключения обработчиков событий. Однако у него есть определенные недостатки, такие как использование только одного обработчика событий для каждого события.

Что касается того, как вернуть обработчики событий, которые прикреплены к определенному узлу, это зависит от метода, который вы используете для прикрепления событий. Проблема с вашим примером заключается в том, что вы используете метод addEventListener(), чтобы прикрепить событие, а затем пытаетесь прочитать его, используя свойство onclick.

Возможно, вы захотите проверить следующий пост переполнения стека для дальнейшего чтения в этой теме, особенно сообщение @Crescent Fresh :

0 голосов
/ 09 августа 2010

Это одно из текущих ограничений модели регистрации событий W3C. если вы регистрируетесь с использованием методов JS, тогда нет стандартного способа получить обработчики.

Последние События DOM LEVEL 3 W3C добавляет спецификацию eventListenerList. Я полагаю, нам не хватает какой-либо тесной поддержки этого API во всех браузерах.

Конечно, если вы добавите свой метод традиционным способом



      


тогда ваш пример сработает.

Некоторые ссылки на StackOverFlow

текст ссылки

0 голосов
/ 09 августа 2010

Существуют разные способы создания обработчиков событий, и они используют разные механизмы внутри DOM. В частности & mdash; и как вы обнаружили эмпирически & mdash; добавление прослушивателя событий через addEventListener не влияет на атрибут «onclick» элемента. Механизмы просто отдельные.

0 голосов
/ 09 августа 2010

Свойство onclick будет показывать вам обработчик событий только в том случае, если он зарегистрирован встроенным через разметку (например, <div id="relative" onclick="alert('foo');"> </div>).

Зачем вам нужно читать обработчик событий? Это довольно странная вещь ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...