2011-04-12 79 views
4

我正在使用asp.net MVC,當我提交表單時,以前的開發人員已經嵌入了一些jQuery驗證。jQuery表單提交:任何方式知道什麼元素觸發提交?

$('form').submit(function() { 
    ...code done here to validate form fields 
}); 

的問題是,無論是「保存」,並在表格火「取消」按鈕,這個提交jQuery的功能。如果「取消」輸入按鈕被觸發(id =「cancel」name =「cancel」value =「cancel」),我不希望驗證邏輯觸發。 有沒有一種方法,在這個提交函數中,我可以檢索按下哪個輸入按鈕來提交表單的ID,名稱或值?

回答

8

我問同樣的問題:How can I get the button that caused the submit from the form submit event?

唯一的跨瀏覽器的解決方案,我能想出是這樣的:

$(document).ready(function() { 
    $("form").submit(function() { 

    var val = $("input[type=submit][clicked=true]").val() 

    // DO WORK 

}); 

$("form input[type=submit]").click(function() { 
    $("input[type=submit]", $(this).parents("form")).removeAttr("clicked"); 
    $(this).attr("clicked", "true"); 
}); 

不知道如果你正在尋找,但你應該回答將「取消」按鈕更改爲定位標記。除非您正在處理表單值,否則無需提交取消。

+0

這很好,謝謝。我只是調整它,並用「圖像」代替「提交」,因爲我的保存和取消是「圖像」類型。現在它給了我按下按鈕的值,無論是「取消」還是「保存」。我只驗證它是否現在不說「取消」值。謝謝! – 2011-04-12 20:29:13

+0

當然很難找到解決方案... – 2017-02-10 13:12:40

0

以及這隻會火如果輸入按鈕的type就像這樣:

<input type='submit' ... 

所以一定要確保取消按鈕沒有type='submit',它應該工作

+0

他們實際上都標記'type =「image」',因爲他們都是圖像輸入按鈕。 – 2011-04-12 20:12:43

+1

然後其他人應該觸發提交。 – Neal 2011-04-12 20:15:03

+0

代碼如下,並提交表格:

<%= ViewData [」docId 「]%>」method =「post」> 」type =「image」id = 「save」value =「save」style =「border:none; <%= ViewData [」showsave「]%>」/> 」type =「image」id =「cancel」value =「cancel」style =「border:none; <%= ViewData [」showsave「]%>」>
2011-04-12 20:21:58

0
var myForm = $('form'); 
$('input[type="submit"]',myForm).click(function(e) { 
    var whoClickedsubmit = $(e.target); //further, you can use .attr('id') 
    //do other things here 
}); 

編輯

.submit(function(event){ 
    var target = event.originalEvent.explicitOriginalTarget.value; 
    //But IE does not have the "explicitOriginalTarget" property 
}); 
+7

對於提交事件,這將返回表單本身,而不是單擊的按鈕。 – mVChr 2011-04-12 20:02:19

+0

是的,這是錯誤的 - 目標將是「形式」。 – 2011-04-12 20:04:12

+0

@mVChr:我編輯了我的答案。 – 2011-04-12 20:07:16

0

編輯

在FF而不是在Chrome這僅適用於(和我的話,我想,不能在其他基於WebKit的瀏覽器要麼),所以我就要離開這個在這裏作爲一個瀏覽器特定的解決方法,一個有趣的筆記,但不是答案。


@沒有發出類型的取消按鈕的尼爾的建議提交也許是最簡潔的方式。但是,如果你必須這樣做,你現在正在這樣做:

$('form').submit(function(e){ 
    if(e.originalEvent.explicitOriginalTarget.id === 'cancel'){ 
     //don't validate 
    } 
    else{ 
     //validate 
    } 
});