2013-01-31 5 views
8

Ich habe ein Formular mit dem folgenden:jquery erkennen, welche Taste eingereichten Formular

<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> 

Ich mag würde zu erkennen, die das Formularereignis nur mit einreichen ausgelöst:

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

Offensichtlich dass Selektor gebe immer den Wert des ersten btnsubmit-Elements zurück, auf das es trifft, also brauche ich einen anderen magischen Selektor oder Filter oder so etwas.

Ich habe $('[name=bttnsubmit][clicked=true]') angekündigt gesehen über, aber das in meinen Versuchen noch nicht gearbeitet hat ...

ich $('[name=bttnsubmit]').click() natürlich Resort könnte aber würde es vorziehen, die Lage sein, meine Ziele in den Formen Veranstaltung einreichen zu erreichen.

Jede Hilfe/Tipps sehr geschätzt.

Antwort

12

Ich weiß nicht, ob es in Event-Daten eingebaut ist (vielleicht gibt es) aber eine Idee, die in den Sinn kommt, ist das Click-Ereignis der Schaltflächen behandeln und eine globale Referenz des Werts speichern. Etwas wie folgt aus:

var ButtonValue; 

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

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

, die mich tun. thanx –

0

In Bezug auf Ihre Aussage:

Ich habe gesehen $ ('[name = bttnsubmit] [Anklicken = true]') angekündigt zu, aber das ist noch nicht in meinen Versuchen gearbeitet ...

Ich fand dies anderswo nicht richtig erklärt. Es ist keine automatische Sache. Sie müssen es immer noch einrichten, indem Sie das "angeklickte" Attribut jedes Mal hinzufügen, wenn auf eine Übergabeschaltfläche geklickt wird.

$("#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") 
    { 
     ... 
    } 
}); 

Ähnlich Beispiel here.

+0

Dies ist auch hier gut dokumentiert: http://stackoverflow.com/a/5721762/277303 –

5

Diese Antwort ist eine Verbesserung von @ musefans Antwort.

Vermeiden Sie globale Variablen. Es ist besser, Daten in Form zu halten:

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

Und in einreichen Handler nur um es bekommen:

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

Formular durch Schlagen eingereicht werden könnte 'Enter'. Um zu vermeiden, null in submittedBy Variable:

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

Hm, das scheint nicht wirklich für mich zu arbeiten. Der Button 'Klick'-Handler wird zugunsten des Formulars 'Submit'-Handler ignoriert. –

+0

* facepalm * ignorieren^Es ist, weil ich ein nicht ein