dlaczego dostaję TypeError: obj.addEventListener nie jest funkcją?
Oto Mój kod:
function addEvent( obj, type, fn ) {
if ( obj.attachEvent ) {
obj['e'+type+fn] = fn;
obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
obj.attachEvent( 'on'+type, obj[type+fn] );
} else
obj.addEventListener(type, fn, false);
}
function alertWinner(){
alert("You may be a winner!");
}
function showWinner (){
var aTag = document.getElementsByTagName("a");
addEvent(aTag, 'click', alertWinner);
}
showWinner();
Zasadniczo pracuję w konsoli firebug i staram się, aby alert pojawił się po kliknięciu dowolnego znacznika.
Nie widzę problemu, który powoduje, że to nie działa i daje mi błąd podany w tytule moich pytań(przeglądane w firebug). Ktokolwiek?
3 answers
document.getElementsByTagName
zwraca NodeList elementów DOM. Każdy element ma funkcję addEventListener
, ale tablica jej nie ma.
Pętla nad nim:
function showWinner (){
var aTags = document.getElementsByTagName("a");
for (var i=0;i<aTags.length;i++){
addEvent(aTags[i], 'click', alertWinner);
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-01 09:17:39
aTag
jest instancją DOMNodeList
, a nie DOMElement
.
var aTags = document.getElementsByTagName("a");
var aTag = aTags[0];
Ale oczywiście to podejście przedstawia wadę, w tym, że może być więcej niż jeden a
element zwrócony. Należy użyć innego selektora, który zwraca tylko jeden element, jeśli to możliwe.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-13 08:07:21
Nie wiem dlaczego, ale mam addEvent is not defined
w Firefoksie. Nie mogłem nawet znaleźć addEvent()
na MDN. Musiałem tego użyć:
function showWinner (){
var aTags = document.getElementsByTagName("a");
for (var i=0;i<aTags.length;i++){
// addEvent(aTags[i], 'click', alertWinner);
aTags[i].addEventListener("click", alertWinner);
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-25 04:37:45