11
votes

ID d'attrape d'une forme qui a une entrée enfant avec un nom = "ID"

Alors j'ai rencontré un problème étrange ... Je veux saisir l'identifiant d'un formulaire dire: xxx

mais exécutant document.getelementbyid ("test"). ID ne renvoie pas Test < / Code> Comme prévu mais renvoie la saisie avec le nom nom = "id" . Quelqu'un sache ce qui se passe ici?

Voici un violon reproducteur du problème -> http: // jsfiddle .NET / JASCBBFU /


3 commentaires

Pourquoi avez-vous besoin de trouver l'identifiant du formulaire? vous l'avez déjà...


Hm, dans votre jsfiddle, j'ai remarqué que le nom de la deuxième entrée de test est "ID1"; Je vousierai que vous interprétez le .Id en tant qu'élément enfant de ce nom, plutôt que comme un attribut réel de lui-même. Je vais jeter un oeil à jsfiddle


@Deep je sais que j'ai l'id, c'est une preuve de concept ...


4 Réponses :


0
votes

C'est à cause de cette ligne ici:

document.getElementById("test").id // Gets input with the name of "id"


0 commentaires

3
votes

Que se passe-t-il ici est un ancien artefact de l'époque où HTML devait être formalisé. Il est censé s'asseoir uniquement sous une collection nommée, mais les navigateurs ont décidé de créer un accès au raccourci dans divers endroits aléatoires. De toute façon, vous pouvez lire plus ici: http://jibbering.com/faq/notes/form -Access / et une fois que je suis sur mon bureau, je citerai les parties pertinentes.


1 commentaires

Pas sur HTML, il s'agit de la DOM.



0
votes

Le JS semble envisager d'envisager ID comme objet enfant à la forme plus grande que vous envisagez. Vous recherchez la fonction, getattribute , cela fonctionne dans jsfiddle: xxx

http://jsfiddle.net/jascbbfu/3/

espère que cela aide!


0 commentaires

12
votes

Les noms de contrôle de formulaire sont utilisés pour créer des propriétés nommées du formulaire qui référence au contrôle. Ainsi, là où vous avez: xxx

puis la propriété iD est attribué une référence à l'élément d'entrée nommé id . Les commandes de formulaire ne doivent jamais recevoir de noms les mêmes que les propriétés de formulaire standard, par ex. Dans ce qui suit: xxx

Il est impossible d'appeler la méthode de soumission du formulaire car form2 référence références l'entrée, pas la méthode.

Comme indiqué dans d'autres réponses, vous pouvez modifier le nom de quelque chose qui ne convertit pas de propriétés de formulaire standard ou d'utiliser getattribute . La première solution est préférée car elle conduira probablement à des noms plus appropriés pour les commandes de formulaire et d'éviter l'utilisation de getattribute .


1 commentaires

Merci, je ne savais pas que vous pouviez écraser les attributs comme ça, joli hacky; P Je vais probablement aller avec getattribute ou ajouter des attributs personnalisés (par exemple "colonne =") car j'aime l'idée de mapper mes entrées de formulaire directement sur mes colonnes de base de données. .