2013-01-31 13 views
8

cui ho un modulo con il seguente:jquery rilevare pulsante presentato sotto forma

<form id="my-form" ...> 
    ... 
    <button type="submit" name="bttnsubmit" value="1">The first button</button> 
    <button type="submit" name="bttnsubmit" value="2">The last button</button> 
</form> 

vorrei rilevare che ha innescato la forma pubblica un evento utilizzando solo:

$('#my-form').submit(function(){ 
    //psuedo code 
    if($('[name=bttnsubmit]').val() == 1) { 
     .... 
    } 
}); 

Ovviamente questo selettore restituisco sempre il valore del primo elemento bttnsubmit che incontra, quindi ho bisogno di qualche altro selettore magico o filtro o qualcosa del genere.

ho visto $('[name=bttnsubmit][clicked=true]') propagandato circa ma che non ha ancora lavorato in miei tentativi ...

potevo ovviamente ricorso alla $('[name=bttnsubmit]').click() ma preferirei essere in grado di raggiungere i miei obiettivi nelle forme presentare evento.

Qualsiasi aiuto/consiglio molto apprezzato.

risposta

12

Non so se ci sono dati di eventi incorporati (forse c'è) ma un'idea che viene in mente è gestire l'evento click dei pulsanti e memorizzare un riferimento globale del valore. Qualcosa di simile a questo:

var ButtonValue; 

$('button[type="submit"]').click(function(e){ 
    ButtonValue = $(this).val(); 
}); 

$('#my-form').submit(function(){ 
    //psuedo code 
    if(ButtonValue == 1) 
    { 
     .... 
    } 
}); 
+0

che farà me. thanx –

0

Per quanto riguarda la sua dichiarazione:

ho visto $ ('[name = bttnsubmit] [cliccato = true]') propagandato circa ma che non ha ancora lavorato in miei tentativi ...

Ho trovato questo non essere spiegato correttamente altrove. Non è una cosa automatica. Devi comunque configurarlo aggiungendo l'attributo "cliccato" ogni volta che viene fatto clic su un pulsante di invio.

$("#my-form input[type=submit]").click(function() { 
    $("input[type=submit]", $(this).parents("form")).removeAttr("clicked"); 
    $(this).attr("clicked", "true"); 
}); 
$("#my-form").submit(function() { 
    var clickedSubmitValue = $("input[type=submit][clicked=true]").val(); 
    if (clickedSubmitValue == "1") 
    { 
     ... 
    } 
}); 

Simile all'esempio here.

+0

Anche questo è ben documentato qui: http://stackoverflow.com/a/5721762/277303 –

5

Questa risposta è un miglioramento della risposta di @ musefan.

Evitare variabili globali. E 'meglio per mantenere i dati in forma:

$('button[type=submit]').click(function (e) { 
    var button = $(this); 
    buttonForm = button.closest('form'); 
    buttonForm.data('submittedBy', button); 
}); 

E nel presentare gestore appena ottenerlo:

$('#my-form').submit(function (e) { 
    var form = $(this); 
    var submittedBy = form.data('submittedBy'); 
    if(submittedBy.val() == 1) { 
     // Any code here... 
    } 
}); 

forma potrebbe essere presentata colpendo 'enter'. Per evitare null in submittedBy variabile:

var submittedBy = form.data('submittedBy') || form.find('button[type=submit]:first'); 
+0

Hm, questo in realtà non sembra funzionare per me. Il gestore del pulsante 'click' viene ignorato a favore del gestore di tipo' submit'. –

+0

* facepalm * ignorare^È perché sto usando un non un