Comme tout développeur JavaScript expérimenté le sait, il existe de nombreuses (trop nombreuses) façons de faire la même chose. Par exemple, disons que vous avez un champ de texte comme suit :
<form name="myForm">
<input type="text" name="foo" id="foo" />
Il existe plusieurs façons d'y accéder en JavaScript :
[1] document.forms[0].elements[0];
[2] document.myForm.foo;
[3] document.getElementById('foo');
[4] document.getElementById('myForm').foo;
... and so on ...
Les méthodes [1] et [3] sont bien documentées dans la documentation de Mozilla Gecko, mais aucune n'est idéale. La méthode [1] est tout simplement trop générale pour être utile et la méthode [3] requiert à la fois un identifiant et un nom (en supposant que vous envoyez les données à un langage côté serveur). Idéalement, il est préférable de n'avoir qu'un attribut id ou un attribut name (avoir les deux est plus compliqué). quelque peu redondant, surtout si l'id n'est nécessaire pour aucun css, et augmente la probabilité de fautes de frappe, etc).
[Mais je ne l'ai pas vu référencé dans la documentation de Gecko et je m'inquiète à la fois de la compatibilité ascendante et de la compatibilité entre navigateurs (et bien sûr, je veux être aussi conforme aux normes que possible).
Quelle est la meilleure pratique en la matière ? Quelqu'un peut-il indiquer quelque chose dans la documentation DOM ou dans les spécifications du W3C qui pourrait résoudre ce problème ?
Notez que je suis spécifiquement intéressé par une solution sans bibliothèque (jQuery/Prototype).
0 votes
Je suppose que je cherche le moyen le plus conforme aux normes d'accéder à un élément de formulaire en utilisant l'attribut name...
5 votes
"Avoir les deux est quelque peu redondant, surtout si l'identifiant n'est pas nécessaire pour les CSS, et augmente la probabilité de fautes de frappe" -- L'identifiant est nécessaire pour une utilisation efficace des étiquettes. Pas seulement pour les CSS.
1 votes
Il arrive qu'il y ait plusieurs formulaires sur une page Web et que les attributs d'identification entrent en collision.