2011-05-11 36 views
6

在我的表單中,我有兩個提交按鈕。發現哪個表單按鈕觸發提交

<input type="submit" name="save" value="Save as draft"/> 
<input type="submit" name="send" value="Start sending" /> 

現在,在將表單提交回服務器之前,我想根據單擊哪個按鈕來執行特定的任務。

$('form').submit(function(){ 
    if submit equals save 
     task 1; 
    elseif submit equals send 
     task 2    
} 

如何檢查哪個按鈕被按下?

+3

我敢肯定,你可以改善這個問題的標題。 – 2011-05-11 16:24:34

+2

爲兩個按鈕添加點擊處理程序 – user489872 2011-05-11 16:26:21

+1

哦,完成.. – goh 2011-05-11 16:26:23

回答

5
$(":submit").click(function() { 
    $("form").data("submit-button", this.name); 
}); 

$("form").submit(function() { 
    var button = $(this).data("submit-button"); 
    ... 
}); 

在您存儲名稱的提交按鈕上添加點擊處理程序。然後在提交處理程序中提取該名稱。

+0

是的,你可以。 [小提琴](http://jsfiddle.net/9KdQh/) – Raynos 2011-05-11 16:35:08

+0

哦,等等,我以爲你只是把按鈕元素本身的名字,而不是形式。但即使如此:爲什麼不把邏輯放在點擊處理程序中,而不是表單的提交處理程序? – 2011-05-11 16:39:18

+2

@MarcelKorpel因爲那麼當你通過其他方法提交表單時,邏輯不會運行,如按ENTER鍵。 – Raynos 2011-05-11 16:59:45

-1
$('input').each(function(n) { 
    $(this).click(function() { 
    var name = $(this).attr('name'); 

    if (name === 'save') { 
     // do stuff 
    }else if (name === 'submit'){ 
     // do some other stuff 
    } 
    } 
}); 

當然你也可以使用switch語句。

如果您要進行的工作是複雜和方式不同,你應該考慮使用2種不同形式的

我希望這回答了你的問題

編輯:

$('input:submit').click(function(n) { 
    var name = $(this).attr('name'); 
    if (name === 'save') { 
     // do stuff 
    }else if (name === 'submit'){ 
     // do some other stuff 
    } 
    } 
}); 
+4

你在哪裏檢查按鈕被點擊? – 2011-05-11 16:29:27

+0

謝謝你,我跳過了那部分:0 – Ibu 2011-05-11 16:34:07

+1

現在你正在添加事件處理程序給_every_'input',即使它不會做任何事情。看起來有點浪費。 – 2011-05-11 16:35:04

5

如果是我,我會做這個有點不同。我會做一些沿行 -

<button type='button' id='formSave'>Save as draft</button> 
<button type='button' id='formSend'>Start Sending</button> 

$('#formSave').click(function(){ 
    //submit form 
    //task 1 
}); 

$('#formSend').click(function(){ 
    //submit form 
    //task 2 
}); 

我只是立足我的回答了你的按鈕名稱和諸如此類的東西,但它聽起來就像你想要做的事simliar了這一點。

+0

我認爲第二個應該使用'#formSend'' – 2011-05-11 16:30:43

+3

這打破了對JavaScript的支持。請寫出不引人注目的JavaScript。 – Raynos 2011-05-11 16:33:02

+1

@Raynos提出了一個很好的觀點。還要記住,可以在不按按鈕的情況下提交表單 - 例如在輸入元素被聚焦時按下回車鍵;有些瀏覽器會僞按最近的按鈕,其他瀏覽器會提交表單而不會僞按一下按鈕。 – 2011-05-11 16:34:58

-2

我建議使用HurnsMobile的做法,但如果你確實需要一個函數來處理這兩個按鈕,您可以使用jQuery的事件對象檢測按鈕,

$('form').submit(function(event){ 
    if(event.target.name == 'save') { 
     // do save task 
    } else if (event.target.name == 'send') { 
     // do send task 
    } 
}); 
+2

你確定這是可行的。我相信一些瀏覽器設置'event.target ===表單' – Raynos 2011-05-11 17:00:27

+0

@Raynos是正確的,'event.target ===表單' – 2017-07-09 12:30:58

相關問題