Domanda

Voglio attivare l'evento di invio del modulo in cui si trova l'elemento corrente. Un metodo che conosco a volte funziona è:

this.form.submit();

Mi chiedo se esiste una soluzione migliore, possibilmente usando jQuery, poiché non sono sicuro al 100% che il metodo funzioni in tutti i browser.

Modifica:

La situazione che ho è la seguente:

<form method="get">
    <p><label>Field Label
        <select onchange="this.form.submit();">
            <option value="blah">Blah</option>
            ....
        </select></label>
    </p>
</form>

Voglio essere in grado di inviare il modulo in caso di modifica di <select>.

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

Quindi, c'è un modo per far recuperare a jQuery il modulo in cui si trova l'input / select / textarea?

È stato utile?

Soluzione

Penso che quello che stai cercando sia qualcosa del genere:

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

Ad esempio, per gestire l'evento onchange, dovresti avere questo:

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

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

Altri suggerimenti

this.form.submit();

Questa è probabilmente la tua scommessa migliore. Soprattutto se non stai già usando jQuery nel tuo progetto, non è necessario aggiungerlo (o qualsiasi altra libreria JS) solo per questo scopo.

Puoi sempre JQuery-ize il tuo form.submit, ma può semplicemente chiamare il stessa cosa:

$("form").submit(); // probably able to affect multiple forms (good or bad)

// or you can address it by ID
$("#yourFormId").submit();

Puoi anche allegare funzioni all'evento di presentazione, ma questo è un concetto diverso.

La tua domanda è alquanto confusa in quanto non spieghi cosa intendi con " elemento corrente " ;.

Se hai più moduli in una pagina con tutti i tipi di elementi di input e un pulsante di tipo " submit " ;, quindi premi " inserisci " al momento della compilazione di uno qualsiasi dei suoi campi attiverà l'invio di tale modulo. Non hai bisogno di Javascript lì.

Ma se hai più " submit " pulsanti in un modulo e nessun altro input (es. " modifica riga " e / o " elimina riga " pulsanti nella tabella), quindi la riga che hai pubblicato potrebbe essere la modo di farlo.

Un altro modo (non è necessario Javascript) potrebbe essere quello di fornire valori diversi a tutti i pulsanti (che sono di tipo " submit "). In questo modo:

<form action="...">
    <input type="hidden" name="rowId" value="...">
    <button type="submit" name="myaction" value="edit">Edit</button>
    <button type="submit" name="myaction" value="delete">Delete</button>
</form>

Quando si fa clic su un pulsante, verrà inviato solo il modulo contenente il pulsante e verrà inviato solo il valore del pulsante premuto (insieme ad altri valori di input).

Quindi sul server leggi il valore della variabile " myaction " e decidere cosa fare.

In JQuery puoi chiamare

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

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

<form method="get">
   <p><label>Field Label
      <select onchange="this.form.submit();">
         <option value="blah">Blah</option>
            ....
     </select>
     </label>
   </p>
    **<!-- <input name="submit" type="submit" /> // name="submit_new_name" -->**
  </form>

<!-- 

   this.form.submit == this.form.elements['submit'];

-->
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top