Следующие коды не работают:
function dnd(){
}
var ele = document.getElementById("relative");
ele.addEventListener("click",dnd,false);
document.write(ele.onclick);
вывод undefined
. Я предполагаю, что вывод должен быть function onclick(event){dnd();}
Что я должен сделать для решения этой проблемы?
Любое предложение ценится.
Существует 3 распространенных способа прикрепления событий к узлам DOM.
Метод addEventListener ()
- это способ зарегистрировать прослушиватель событий, как указано в W3C DOM. Он имеет много преимуществ, но не работает в Internet Explorer. Для Internet Explorer вам придется использовать метод attachEvent ()
, который предлагает аналогичные функции.
С другой стороны, свойство onclick
является более старым, но более поддерживаемым способом подключения обработчиков событий. Однако у него есть определенные недостатки, такие как возможность использовать только один обработчик событий для каждого события.
Что касается того, как вернуть обработчики событий, прикрепленные к конкретному узлу, это зависит от метода, который вы используете для присоединения событий. Проблема с вашим примером заключается в том, что вы используете метод addEventListener ()
для присоединения события, а затем пытаетесь прочитать его с помощью свойства onclick
.
Вы можете прочитать следующую публикацию Stack Overflow для дальнейшего изучения этой темы, особенно сообщение от @Crescent Fresh :
Свойство onclick будет отображать обработчик событий только в том случае, если он зарегистрирован встроенным через разметку ( например, Зачем нужно читать обработчик событий? Это относительно странная вещь ...
div
>).
Существуют разные способы создания обработчиков событий, и они используют разные механизмы внутри DOM. В частности - и как вы обнаружили эмпирически - добавление прослушивателя событий через addEventListener не влияет на атрибут onclick элемента. Механизмы просто раздельные.
Это один из текущих ограничение модели регистрации событий W3C. если вы регистрируетесь с использованием JS-методов, то стандартного способа получения обработчиков не существует.
Последние события DOM LEVEL 3 W3C добавляет спецификацию eventListenerList. Полагаю, нам не хватает какой-то поддержки этого API в браузерах.
Конечно, если вы добавите свой метод традиционным способом
, то ваш пример будет работать.
Некоторые ссылки на StackOverFlow