jQuery trova il modulo principale


219

ho questo html

<ul>
    <li><form action="#" name="formName"></li>
    <li><input type="text" name="someName" /></li>
    <li><input type="text" name="someOtherName" /></li>
    <li><input type="submit" name="submitButton" value="send"></li>
    <li></form></li>
</ul>

Come posso selezionare il modulo di cui input[name="submitButton"]fa parte? (quando faccio clic sul pulsante di invio voglio selezionare il modulo e aggiungere alcuni campi in esso)

Risposte:


485

Suggerirei di utilizzare closest, che seleziona l'elemento genitore corrispondente più vicino:

$('input[name="submitButton"]').closest("form");

Invece di filtrare in base al nome, farei questo:

$('input[type=submit]').closest("form");

2
Forse dovremmo aggiungere ottenere per indice? '$ ( "input [type = submit]") ( "forma") più vicino;.' restituisce una matrice di moduli.
sergzach,

Sto cercando di utilizzare quanto sopra in questo modo: $ (". Ogni img"). Click (function () {$ (this) .closest ("form"). Show ();}); Ma non riesco a farlo funzionare. : /
Alisso,

2
La risposta di Peterjwest è migliore di questa.
Gagarine,

In HTML5, c'è un nuovo attributo 'form' che ti permette di avere l'elemento al di fuori del modulo genitore. Questo dovrebbe essere verificato prima.
mcintyre321

56

Puoi utilizzare il riferimento al modulo che esiste su tutti gli input, questo è molto più veloce di .closest()(5-10 volte più veloce in Chrome e IE8). Funziona anche su IE6 e 7.

var input = $('input[type=submit]');
var form = input.length > 0 ? $(input[0].form) : $();

2
Citi IE8. Funziona anche con le versioni 6, 7 e 9?
Sonny,

1
Questo è molto meglio e più veloce come menzionato da @peterjwest. Per quanto riguarda IE6, penso che .form sugli elementi di input fosse su IE4, sfortunatamente la pagina di sviluppo di netscape è sparita ora ... e chi controllerebbe Mozilla.
Maciej Łopaciński,

Questo è un modo molto più sicuro piuttosto che usare closest()poiché un input può avere una propria assegnazione di modulo: codepen.io/anon/pen/vNqEyg
Möhre

Probabilmente hai usato l'abbreviazione if notation per abbreviare il tuo codice, ma in questo esempio distrae solo dal codice reale che vuoi mostrare (specialmente per le persone che non hanno familiarità con l'abbreviazione). Sarei a favore dell'uso di un if () regolare.
AeonOfTime

Direi che c'è troppa confusione con quella soluzione. Se vai con questo (la mia soluzione di seguito - sì, questa è una pubblicità :)): stackoverflow.com/a/18921404/261332 , allora non hai bisogno di quel tipo di complicazioni, poiché funzionerà solo quando dovrebbe e non fare diversamente.
userfuser

17

Per me, questo sembra il più semplice / veloce:

$('form input[type=submit]').click(function() { // attach the listener to your button
   var yourWantedObjectIsHere = $(this.form);   // use the native JS object with `this`
});

2
Per me, usare $(this.form)è la soluzione migliore
jap1968,

2

A partire dai browser HTML5 si può usare inputElement.form: il valore dell'attributo deve essere un id di un <form>elemento nello stesso documento. Maggiori informazioni su MDN .


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.