117 votes

Comment obtenir la forme contenue d'une entrée ?

J'ai besoin d'obtenir une référence au FORM parent d'un INPUT alors que je n'ai qu'une référence à ce INPUT. Est-ce possible avec JavaScript ? Utilisez jQuery si vous le souhaitez.

function doSomething(element) {
    //element is input object
    //how to get reference to form?
}

Ça ne marche pas :

var form = $(element).parents('form:first');

alert($(form).attr("name"));

203voto

Paolo Bergantino Points 199336

Les éléments DOM natifs qui sont des entrées ont également une fonction form qui pointe vers le formulaire auquel ils appartiennent :

var form = element.form;
alert($(form).attr('name'));

Selon w3schools le .form des champs de saisie est prise en charge par IE 4.0+, Firefox 1.0+, Opera 9.0+, ce qui représente encore plus de navigateurs que ce que jQuery garantit, vous devriez donc vous en tenir à cela.

S'il s'agissait d'un autre type d'élément (pas une <input> ), vous pouvez trouver le parent le plus proche avec closest :

var $form = $(element).closest('form');
alert($form.attr('name'));

Voir également ce lien MDN sur le form propriété de HTMLInputElement :

0 votes

Bon, ça marche A propos de l'attribut de formulaire. Je viens de l'essayer et ça marche aussi. Mais ce n'est pas supporté par tous les navigateurs, vous dites ?

0 votes

Je suis presque sûr que ça l'est. Mais je ne suis pas sûr à 100%, alors je ne veux rien promettre. Je me renseigne en ce moment même...

5 votes

Utilisez element.form - il fonctionnera sur plus de navigateurs que jQuery. Il s'agit également d'une référence à une propriété, ce qui est mille fois plus efficace que de remonter l'arbre du DOM avec closest().

49voto

Gareth Points 42402

Chaque entrée a un form qui pointe vers le formulaire auquel l'entrée appartient, donc simplement :

function doSomething(element) {
  var form = element.form;
}

4voto

Nigel Francois Points 31

J'utilise un peu de jQuery et du javascript à l'ancienne - moins de code.

$($(this)[0].form) 

Il s'agit d'une référence complète au formulaire contenant l'élément

5 votes

En gros, vous dites "faites de cet objet un objet jQuery, puis faites que ce ne soit pas un objet jQuery".

1 votes

Bon sang, pourquoi ne pas simplement faire $(this.form) ?

3voto

yfeldblum Points 42613

Utilisation de jQuery :

function doSomething(element) {
    var form = $(element).closest("form").get().
    //do something with the form.
}

2voto

Steven Wright Points 31

Si vous utilisez jQuery et que vous disposez d'une poignée sur un élément de formulaire, vous devez obtenir(0) l'élément avant d'utiliser .form.

var my_form = $('input[name=first_name]').get(0).form;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X