C’è una soluzione jQuery migliore per this.form.submit () ;?

Voglio triggersre l’evento submit del modulo in cui si trova l’elemento corrente. Un metodo che conosco funziona a volte è:

this.form.submit(); 

Mi chiedo se c’è una soluzione migliore, possibilmente utilizzando jQuery, perché non sono sicuro al 100% che il metodo funzioni in ogni browser.

Modificare:

La situazione che ho è, come segue:

 

Voglio poter inviare il modulo al cambiamento di .

Quello che sto cercando è una soluzione che funziona su qualsiasi campo in qualsiasi forma senza conoscere l’id o il nome sul modulo. $('form:first') e $('form') non funzioneranno perché il modulo potrebbe essere il terzo sulla pagina. Inoltre, sto usando jQuery sul sito già, quindi usare un po ‘di jQuery non è un grosso problema.

Quindi, c’è un modo per avere jQuery recuperare il modulo in cui è inserito l’input / select / textarea?

Penso che quello che stai cercando sia qualcosa del genere:

 $(field).closest("form").submit(); 

Ad esempio, per gestire l’evento onchange, avresti questo:

 $(select your fields here).change(function() { $(this).closest("form").submit(); }); 

Se, per qualche motivo, non utilizzi jQuery 1.3 o versioni successive, puoi chiamare i parents anziché i closest .

 this.form.submit(); 

Questa è probabilmente la soluzione migliore. Soprattutto se non stai già usando jQuery nel tuo progetto, non c’è bisogno di aggiungerlo (o qualsiasi altra libreria JS) solo per questo scopo.

Puoi sempre JQuery-ize tuo form.submit, ma potrebbe semplicemente chiamare la stessa cosa:

 $("form").submit(); // probably able to affect multiple forms (good or bad) // or you can address it by ID $("#yourFormId").submit(); 

Puoi anche associare funzioni all’evento di invio, ma questo è un concetto diverso.

Simile alla risposta di Matthew , ho appena scoperto che puoi fare quanto segue:

 $(this).closest('form').submit(); 

Sbagliato: il problema con l’utilizzo della funzionalità genitore è che il campo deve essere immediatamente all’interno del modulo per funzionare (non all’interno di tds, etichette, ecc.).

Sono corretto: anche i genitori (con una s) funzionano. Grazie Paolo per averlo indicato.

Ho trovato che usando jQuery la soluzione migliore è

 $(this.form).submit() 

Usando questa istruzione i plug-in jquery (ad esempio il plug-in del modulo jquery ) funzionano correttamente e il sovraccarico del movimento jquery DOM viene ridotto al minimo.

La tua domanda è piuttosto confusa perché non spieghi cosa intendi per “elemento corrente”.

Se si dispone di più moduli su una pagina con tutti i tipi di elementi di input e un pulsante di tipo “submit”, quindi premendo “invio” al momento del riempimento di uno dei suoi campi si attiverà l’invio di tale modulo. Non hai bisogno di Javascript qui.

Ma se hai più pulsanti “invia” su un modulo e nessun altro input (es. “Modifica riga” e / o “cancella riga” nella tabella), la linea che hai postato potrebbe essere il modo per farlo.

Un altro modo (senza Javascript necessario) potrebbe essere quello di dare valori diversi a tutti i pulsanti (che sono di tipo “submit”). Come questo:

 

Quando fai clic su un pulsante, verrà inviato solo il modulo contenente il pulsante e verrà inviato solo il valore del pulsante che hai colpito (insieme ad altri valori di input).

Quindi sul server hai appena letto il valore della variabile “myaction” e decidi cosa fare.

In JQuery puoi chiamare

 $("form:first").trigger("submit") 

Non so se è molto meglio. Penso form.submit (); è abbastanza universale.

 

****