11548 sujets

JavaScript, DOM et API Web HTML5

Salut,

Je ne sais pas pourquoi mais je n'arrive pas à récupérer un input type="image" en javascript, j'ai toujours la valeur "undefined".

Par exemple j'ai un form contenant des champs et un <input type="image" src="image.gif" name="btnSubmit" />, quand je fais document.getElementById('monForm').unChamp je récupère bien un objet, par contre document.getElementById('monForm').btnSubmit ou document.getElementById('monForm').getElementsByTagName('input')[1] j'ai toujours "undefined" !

Mon but est de récupérer cet objet pour lui modifier sa valeur onclick().

Merci.
Modifié par jeyce (06 Mar 2007 - 18:07)
En effet, ça ne fonctionne pas.

Ceci dit, la syntaxe que tu utilises est déconseillée.

Apparemment, ça marche correctement avec les syntaxes suivantes :
alert("btnSubmit : " + document.getElementById('form1').getElementsByTagName("input")[1]);
alert("btnSubmit : " + document.getElementsByName("btnSubmit")[0]);
Mais dans ce cas je suis obligé de savoir quel est l'ordre de l'input, et si on modifie le formulaire, alors on est obligé de modifier le script... Smiley decu

edit : j'avais pas bien vu la seconde ligne, en effet c'est mieux mais on n'est plus en relatif par rapport au formulaire, ce qui reste important dans mon cas.

PS : désolé d'être compliqué dans tous mes posts...
Modifié par jeyce (02 Mar 2007 - 17:21)
Salut,

J'ai trouvé dans le working draft de Web Forms 2.0 une explication qui précise que dans le DOM 0, les input de type image ne sont pas inclus dans la collection elements. Je suppose que les navigateurs doivent suivre cette règle (que je n'ai par contre pas trouvée dans les versions du DOM HTML standardisées par le W3C).

Je crois que tu vas être obligé d'écrire une fonction spécifique :
function getInput(form, name) {
  var inputs = form.getElementsByTagName("input");
  for (var i = 0; i < inputs.length; ++i) {
    if (inputs[ i].name == name) {
      return inputs[ i];
    }
  }

  return null;
}

alert("btnSubmit : " + getInput(document.getElementById("form1"), "btnSubmit"));

Modifié par Julien Royer (03 Mar 2007 - 14:35)
Merci ! (je rajoute ce texte entre parenthèses car ça me dit "texte trop court" quand je veux poster ; on peut pas être poli et juste dire "merci" ici Smiley cligne )