2013-01-31 26 views
8

有以下形式:jQuery的檢測我有一個按鈕提交的表單

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

我想檢測其觸發的形式提交事件只使用:

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

顯然是選擇將總是返回它遇到的第一個bttnsubmit元素的值,所以我需要一些其他的魔法選擇器或過濾器或其他東西。

我見過$('[name=bttnsubmit][clicked=true]')吹捧有關,但還沒有在我工作的嘗試......

我當然可以訴諸$('[name=bttnsubmit]').click(),但希望能夠實現我的目標形式提交事件。

任何幫助/提示非常感謝。

回答

12

我不知道是否有內置的事件數據(可能存在),但想到的一個想法是處理按鈕的單擊事件並存儲該值的全局引用。事情是這樣的:

var ButtonValue; 

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

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

,會做我的。 thanx –

0

關於你的語句:

我看到$( '[NAME = bttnsubmit] [點擊=真]')吹捧有關,但還沒有在我的努力工作...

我發現這個問題在其他地方不能正確解釋。這不是一件自動的事情。無論何時單擊提交按鈕,您仍然需要通過添加「單擊」屬性來設置它。

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

類似於示例here

+0

這在這裏也有很好的記錄:http://stackoverflow.com/a/5721762/277303 –

5

這個答案是@ musefan的答案的改進。

避免全局變量。這是更好地保持數據的形式:

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

而且在提交處理程序只是得到它:

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

形式可以通過按「ENTER」鍵提交。爲了避免nullsubmittedBy變量:

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

嗯,這實際上並不適用於我。按鈕'click'處理程序正在被忽略,轉而使用'submit'處理程序。 –

+0

* facepalm *無視^這是因爲我使用的是而非