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"));
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
:
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;
}
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
Utiliser jQuery :
function doSomething(element) {
var form = $(element).closest("form").get().
//do something with the form.
}
J'avais besoin d'utiliser element.attr ('form') à la place de element.form
J'utilise firefox sur Fedora 12
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.
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;
simplement comme:
alert( $(this.form).attr('name') );
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