Javascript et IE : document.createElement('input') et document.forms['the_form'].elements['the_input']
Par Twidi,
mardi 15 novembre 2005 à 18:09 :: Développement
:: #46
:: rss
Tags : internet explorer - javascript - navigateurs
J'ai découvert un petit bug dans IE6 (celui qui dit "un de plus"... ben il le dit... ).
Sur un site développé pour un client (celui dont je parlais il y a peu), j'ai une partie en javascript. On peut, en cliquant sur un bouton, ajouter des lignes de formulaire.
Voici une partie du code :
var input_mail = document.createElement('input');
input_mail.setAttribute('name', 'mail2');
input_mail.setAttribute('id', 'step3_mail2');
input_mail.className = 'step3_mail_input';
...
a_div_in_the_form.appendChild(input_mail);
Donc ajout classique d'un élément via le DOM.
Plus tard, j'ai un onsubmit sur le formulaire dans lequel j'effectue une validation.
Je veux donc pouvoir accéder au nouveau champs pour tester son contenu
Je fais donc, très logiquement
var input = documents.forms['the_form'].elements['mail2'];
Et bien pour IE6, impossible, l'élément n'existe pas. Pourtant quand on parcoure le tableau avec des index numériques, on trouve bien l'élément avec name = 'mail2'. J'ai aussi essayé avec l'id plutôt que le name, mais rien à faire. La création de l'élément n'a pas correctement mis à jour le tableau elements.
Pour éviter de refaire tout mon code, j'ai créé une petite fonction qui renvoie une table de hashage qui, pour chaque nom du tableau, me donne son index.
function el_id_by_name(el) {
var els = new Array();
for (i=0;i<el.length;i++) {
if (el[i].name) {
els[el[i].name] = i;
}
}
return els;
}
Et mon code précédent devient
var els = el_id_by_name(document.forms['the_form'].elements); var input = document.forms['the_form'].elements[els['mail2']];
Notez le remplacement de elements['mail2'] par elements[els['mail2']]
Voilà 
Commentaires
1. Le vendredi 13 janvier 2006 à 21:33, par zeank
2. Le samedi 14 janvier 2006 à 02:48, par Twidi :: site
3. Le jeudi 27 avril 2006 à 15:03, par dana
4. Le vendredi 28 avril 2006 à 14:10, par Twidi :: site
5. Le samedi 4 août 2007 à 21:38, par 3Fan
6. Le lundi 18 février 2008 à 16:38, par milou
7. Le lundi 18 février 2008 à 21:21, par Twidi :: site
8. Le vendredi 28 mars 2008 à 14:54, par Auby :: site
Ajouter un commentaire