2009-09-01 7 views
3

IE semble ajouter automatiquement un attribut "selected" sur la balise option.
Mais alors si vous le clonez, les choses deviennent bizarres.IE8: La balise option reçoit un attribut "selected" par défaut (et cloneNode en fait un désordre)

Si vous ouvrez une page dans IE8 avec le code ci-dessous:

<html> 
<body> 
    <form><select><option>o1</option></select></form> 
    <script> 

     // without clone node 
     var elm = document.getElementsByTagName('form')[0]; 
     alert(elm.innerHTML); 

     // using the form as the root to clone 
     elm = document.getElementsByTagName('form')[0].cloneNode(true); 
     alert(elm.innerHTML); 

     // using the select as the root to clone 
     elm = document.getElementsByTagName('select')[0].cloneNode(true) 
     alert(elm.innerHTML); 

    </script> 
</body> 
</html> 

Vous obtiendrez:

Une 1ère alerte, avec un misérable "sélectionné" attribut sur l'étiquette d'option
A 2 alerte, sans attribut sur l'étiquette d'option (Ceci est OK, comme dans n'importe quel autre navigateur!)
Une 3ème alerte, avec le "sélectionné" apparaissant à nouveau

Une idée de pourquoi cette attr ibute apparaît?
Et puis pourquoi cloneNode semble l'enlever au hasard ou non?

Note: Vous pouvez penser pourquoi ce pauvre gars a un problème avec cela?
La raison est que je suis un contributeur de la bibliothèque JS templating PURE
et je vais avoir un peu de temps difficile de trouver une solution propre à ce problème: - \

Répondre

0

La raison pour laquelle l'attribut sélectionné est ajouté est que c'est le premier élément d'option dans l'élément select. Lorsque ceci est vrai et qu'aucun autre élément d'option n'est déjà marqué comme sélectionné, IE fera le premier élément d'option sélectionné. Lorsque vous clonez un nœud comme vous l'avez fait sans le mettre dans le dom, il ne peut pas être sélectionné. Si vous voulez des résultats cohérents, définissez simplement l'attribut sélectionné manuellement.

+0

Merci pour votre réponse (il y a 3+ ans ...) Je ne veux pas le sélectionner, c'est précisément le problème. IE semble le sélectionner automatiquement, mais avec le cloneNode, le résultat est incohérent. – Mic

Questions connexes