2010-08-09 4 views
1

Les codes suivants ne fonctionnent pas:le gestionnaire d'événements renvoie undefined

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

la sortie est undefined. Je suppose que la sortie doit être function onclick(event){dnd();}

Que dois-je faire pour résoudre ce problème?

Toute suggestion est appréciée.

+1

Quelle est la plus grande image ici? Qu'essayez-vous d'accomplir? – Pointy

Répondre

2

Il existe 3 façons courantes d'attacher des événements aux nœuds DOM.

La méthode addEventListener() permet d'enregistrer un écouteur d'événement tel que spécifié dans le DOM W3C. Il a de nombreux avantages, mais ne fonctionne pas dans Internet Explorer. Pour Internet Explorer, vous devez utiliser la méthode attachEvent(), qui offre des fonctionnalités similaires. D'autre part, la propriété onclick est un moyen plus ancien, mais plus pris en charge, d'attacher des gestionnaires d'événements. Cependant, il présente certains inconvénients, tels que permettre un seul gestionnaire d'événements pour chaque événement. En ce qui concerne la façon de récupérer les gestionnaires d'événements attachés à un nœud particulier, cela dépend de la méthode que vous utilisez pour attacher les événements. Le problème avec votre exemple est que vous utilisez la méthode addEventListener() pour attacher l'événement, puis essayez de le lire à l'aide de la propriété onclick.

Vous pouvez vérifier le poste Stack Overflow suivant Pour aller plus loin dans ce sujet, en particulier les post by @Crescent Fresh:

0

Le onclick propriété ne va vous montrer un gestionnaire d'événements si elle est enregistrée en ligne via le balisage (par exemple, <div id="relative" onclick="alert('foo');"></div>). Pourquoi avez-vous besoin de lire le gestionnaire d'événements?

Pourquoi? C'est une chose relativement étrange à faire ...

+1

Eh bien, il serait également possible de définir explicitement l'attribut "onclick" de Javascript. – Pointy

0

Il existe différentes façons d'établir des gestionnaires d'événements, et ils utilisent différents mécanismes dans le DOM. En particulier — et comme vous avez découvert empiriquement — l'ajout d'un écouteur d'événement via "addEventListener" n'affecte pas l'attribut "onclick" de l'élément. Les mécanismes sont simplement séparés.

0

Ceci est un de la limitation actuelle de l'enregistrement des événements W3C modèle. Si vous vous inscrivez en utilisant des méthodes JS, il n'y a pas de moyen standard d'obtenir les gestionnaires.

Dernière DOM LEVEL 3 Events W3C ajoute la spécification eventListenerList. Je suppose que nous manquons d'un support proche pour cette API à travers les navigateurs.

-sûr si vous ajoutez votre méthode à l'aide de façon tradition



     

 

alors votre exemple fonctionnerait.

Certains Stackoverflow Liens

link text