Bug de IE

Résolu
Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 - 6 nov. 2007 à 17:22
Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 - 7 nov. 2007 à 14:57
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

PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
7 nov. 2007 à 06:20
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)
3
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 nov. 2007 à 00:10
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.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 nov. 2007 à 00:16
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.
0
Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
7 nov. 2007 à 01:26
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
7 nov. 2007 à 14:57
En théorie, getAttribute fait la même chose, mais ta méthode fait le travail sur IE.
0
Rejoignez-nous