Come ottenere la forma di contenimento di un input?


106

Ho bisogno di ottenere un riferimento al genitore FORM di un INPUT quando ho solo un riferimento a quell'INPUT. È possibile con JavaScript? Usa jQuery se lo desideri.

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

Questo non funziona:

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

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

Risposte:


185

Gli elementi DOM nativi che sono input hanno anche un formattributo che punta al modulo a cui appartengono:

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

Secondo w3schools , la .formproprietà dei campi di input è supportata da IE 4.0+, Firefox 1.0+, Opera 9.0+, che sono ancora più browser garantiti da jQuery, quindi dovresti attenersi a questo.

Se questo fosse un diverso tipo di elemento (non un <input>), potresti trovare il genitore più vicino con closest:

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

Inoltre, vedere questo collegamento MDN sulla formproprietà di HTMLInputElement:


Va bene, questo funziona .. Informazioni sull'attributo form. L'ho appena provato e funziona anche. Ma questo non è supportato su tutti i browser che stai dicendo?
Ropstah

Sono abbastanza sicuro che lo sia. Solo che non sono sicuro al 100%, quindi non voglio promettere nulla. Lo sto esaminando in questo momento ...
Paolo Bergantino

5
Usa element.form: funzionerà su più browser rispetto a jQuery. È anche un riferimento a una proprietà, quindi sarà circa mille volte più efficiente che salire sull'albero DOM con più vicino ().
NickFitz

1
Sono d'accordo. Come ho detto, inizialmente non ero sicuro che la proprietà form fosse ampiamente implementata in tutti i browser comuni. Ho modificato la mia risposta per elencarla in modo più esplicito come l'opzione migliore mentre lascio il più vicino come bocconcino se si trattava di un diverso tipo di elemento.
Paolo Bergantino

Sembra funzionare anche con altri tipi di input come select. Buono a sapersi.
Falk

42

Ogni input ha una formproprietà che punta alla forma a cui appartiene l'input, quindi semplicemente:

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

4

Uso un po 'di jQuery e javascript vecchio stile - meno codice

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

Questo è un riferimento completo al modulo contenente l'elemento


3
In pratica stai dicendo "rendilo un oggetto jQuery e poi rendilo non un oggetto jQuery".
Isherwood

1
accidenti, perché non farlo solo $(this.form)?
Andre Figueiredo

3

Utilizzando jQuery :

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

2

Se si utilizza jQuery e si dispone di un handle per qualsiasi elemento del form, è necessario ottenere (0) l'elemento prima di utilizzare .form

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

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

e nell'html, devi trovare quell'elemento e aggiungere l'attributo "form" per connetterti a quel modulo, fai riferimento a http://www.w3schools.com/tags/att_input_form.asp ma questo modulo attr non supporto IE , per esempio, devi passare direttamente l'id del modulo.


2

Avevo bisogno di usare al element.attr('form')posto di element.form.

Uso Firefox su Fedora 12.


0

semplicemente come:

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

0

E ancora uno ...

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

Questo esempio di una funzione Javascript viene chiamato da un listener di eventi per identificare il modulo

function submitUpdate(event) {
    trigger_field = document.getElementById(event.target.id);
    trigger_form = trigger_field.form;

-2

questo funzionerebbe? (lasciando in bianco l'azione, il modulo torna anche a se stesso, giusto?)

<form action="">
<select name="memberid" onchange="this.form.submit();">
<option value="1">member 1</option>
<option value="2">member 2</option>
</select>

"this" sarebbe l'elemento select, .form sarebbe il suo form genitore. Destra?

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.