L'accès de l'événement.cible dans IE8 Javascript non-intrusif
La fonction suivante devient la cible de l'élément dans un menu déroulant:
function getTarget(evt){
var targetElement = null;
//if it is a standard browser
if (typeof evt.target != 'undefined'){
targetElement = evt.target;
}
//otherwise it is IE then adapt syntax
else{
targetElement = evt.srcElement;
}
//return id of <li> element when hovering over <li> or <a>
if (targetElement.nodeName.toLowerCase() == 'li'){
return targetElement;
}
else if (targetElement.parentNode.nodeName.toLowerCase() == 'li'){
return targetElement.parentNode;
}
else{
return targetElement;
}
Inutile de dire, il fonctionne dans Firefox, Chrome, Safari et Opera mais il ne fonctionne pas avec IE8 (et je suppose que dans les précédentes versions).
Quand j'essaie de le déboguer avec IE8, j'ai l'erreur "Membre non Trouvé" sur la ligne:
targetElement = evt.srcElement;
le long de avec d'autres erreurs, mais je pense que c'est la clé de la ligne.
Toute aide sera appréciée.
Désolé, pour une raison quelconque, la mise en forme n'est pas correcte.
Voici de nouveau la fonction
function getTarget(evt){
var targetElement = null;
//if it is a standard browser get target
if (typeof evt.target != 'undefined'){
targetElement = evt.target;
}
//otherwise it is IE then adapt syntax and get target
else{
targetElement = evt.srcElement;
}
//return id of <li> element when hovering over <li> or <a>
if (targetElement.nodeName.toLowerCase() == 'li'){
return targetElement;
}
else if (targetElement.parentNode.nodeName.toLowerCase() == 'li'){
return targetElement.parentNode;
}
else{
return targetElement;
}
}//fin de la getTarget
- Vous devez utiliser jQuery.
- Ouais, ce serait le moyen le plus facile 😉
Vous devez vous connecter pour publier un commentaire.
Dans mon expérience, le problème que vous décrivez n'est pas liée à l'endroit où l'événement est obtenu (fenêtre ou un gestionnaire de paramètre), mais plutôt en raison de l'existence ou non de l'événement a été soulevée "correctement". Par exemple, si vous avez un texte de l'élément d'entrée et vous appelez sa onchange méthode sans passer dans un objet d'événement, l'événement.srcElement propriété sera nulle.
Le code suivant à partir Jehiah est utile
Exemple d'appel:
Le problème est que dans IE, de l'objet d'événement n'est pas transmise en argument de la fonction, c'est juste une propriété globale (
window.event
):Version plus courte jamais vu:
J'ai rencontré ce problème aussi.
Et le problème est: IE8, l'événement doit être
window.event
, non pas l'événement qui est déclaré dans les params.J'ai fixé comme ci-dessous: