Bug de IE

[Résolu]
Signaler
Messages postés
1044
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
13 juillet 2010
-
Messages postés
1044
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
13 juillet 2010
-
Sans grande surprise je suis tombé sur un bug plutôt difficile à contourner de IE. J'explique :

<form action="get/_.php" method="POST" onsubmit="alert(this.getAttribute('action'));">

</form>

Sous IE : Ça me retourne le input qui a le nom action.
Sous FF et Opéra : L'attribut action du formulaire.

Normalement getAttribute retourne un attribut, ce que IE ne fait pas. Des suggestions pour que ça marche sur IE ? Il existe des "tweaks" pour contourner ce bug ?

5 réponses

Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
18
Bonjour à tous,
tu peux toujours utiliser
this.attributes.action.nodeValue
exemple
//---------------------------------------
function _GetAttribute( this_, attribut_){
  if( this_.attributes[attribut_]){
    return( this_.attributes[attribut_].nodeValue);
  }
  else
    return( undefined);
}

essaies avec<form onsubmit " alert( _GetAttribute( this, 'action')); alert( this.getAttribute('action'));" action "get/_.php" method="POST" >
 


;0)
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Hello,

oui,
et de manière générale d'ailleurs : ne pas utiliser de valeur pour un
attribut name qui soit aussi un élément du DOM (attribut, élément,
etc).
Bref, mets name="act" par exemple, et re-teste ton code.
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Pour l'explication, quand même...
Mettons que tu aies un id à ton formulaire et que tu fasses appel à une fonction sur le onsubmit :
<form action="get/_.php" id="myFrm" method="POST" onsubmit="lambdaFunc();">



</form>

et dans lambdaFunc, tu es autorisé à attaquer ton formulaire ainsi :
with (document.getElementById('myFrm')) {
  action.value="oula!!!!";
}
et là , tu crois que tu modifies quoi...? Très clairement (et ce n'est pas un bug), tu vas chercher l'élément enfant de ton formulaire qui a pour attribut name "action" pour le premier.
Et si maintenant tu fais ça :
with (document.getElementById('myFrm')) {

  action.value="aie...";
  action = 'aie aie aie...";

}
Il se passe quoi? T'es pas sûr? A mon avis, ton navigateur non plus...et pour cause : ton code est ambigüe.

Alors ok, pour le getAttribute(), C'EST un bug. Mais ça reste une situation qu'il vaut mieux éviter parce que c'est source d'erreur. action est un mot réservé du DOM html. Ne l'utilise pas pour autre chose.
Messages postés
1044
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
13 juillet 2010
7
J'ai posé la question sur les forums MSDN et j'ai appris que c'est un bug connu sur IE.

Pour le code je peux le modifier, mais ça va rester un problème pour ma classe de AJAX.
Messages postés
1044
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
13 juillet 2010
7
En théorie, getAttribute fait la même chose, mais ta méthode fait le travail sur IE.