web-dev-qa-db-fra.com

Comment obtenir le formulaire parent d'une entrée?

Je dois obtenir une référence au parent du formulaire d'un INPUT lorsque je n'ai qu'une référence à cet 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?
}

Cela ne marche pas:

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

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

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

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

Selon w3schools , la propriété .form des champs de saisie est prise en charge par IE 4.0+, Firefox 1.0+, Opera 9.0+, qui sont encore plus de navigateurs que jQuery garantit, vous devez donc vous y tenir.

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

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

Consultez également ce lien MDN sur la propriété form de HTMLInputElement:

160
Paolo Bergantino

Chaque entrée a une propriété form qui pointe vers le formulaire auquel appartient l’entrée.

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

J'utilise un peu de javascript jQuery et old style - moins de code

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

Ceci est une référence complète au formulaire contenant l'élément

5
Nigel Francois

Utiliser jQuery :

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

J'avais besoin d'utiliser element.attr ('form') à la place de element.form

J'utilise firefox sur Fedora 12

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

et dans le HTML, vous devez trouver cet élément et ajouter l'attribut "formulaire" pour vous connecter à ce formulaire. Veuillez vous référer à http://www.w3schools.com/tags/att_input_form.asp mais ce formulaire attr ne prend pas en charge IE, c.-à-d. vous devez passer directement l'identifiant du formulaire.

2
阳光Emi

Si vous utilisez jQuery et que vous avez un descripteur sur n'importe quel élément de formulaire, vous devez obtenir l'élément (0) avant d'utiliser

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

simplement comme:

alert( $(this.form).attr('name') );
0
sadnix

Et encore un ....

var _e = $(e.target); // e being the event triggered
var element = _e.parent(); // the element the event was triggered on
console.log("_E " + element.context); // [object HTMLInputElement]
console.log("_E FORM " + element.context.form); // [object HTMLFormElement]
console.log("_E FORM " + element.context.form.id); // form id
0
Jadeye