[英]How can I find the button that was clicked from the form submit event in jquery?
我有一個正在使用的函數,用於防止表單的多次回發:
var submitted = false;
$(function() {
$('form').bind('submit', function(e) {
if (!submitted && CanSubmit(e)) {
submitted = true;
return true;
} else {
return false;
}
});
});
在CanSubmit
方法中,我需要詢問被單擊的按鈕,以確定是否應允許提交。
請注意,我無法綁定到特定的點擊事件-有關更多詳細信息,請參見前面的問題 。
在Firefox中,我可以使用e.originalEvent.explicitOriginalTarget
,但這顯然在IE中不可用。
如何以跨瀏覽器的方式從e
參數獲取此值?
使用
e.target
-jQuery
將其標准化以實現跨瀏覽器的一致性。
我可以為explicitOriginalTarget
找到的最接近的東西是document.activeElement
(對於IE)-它是事件期間具有焦點的元素。 沒有基於Webkit的瀏覽器的等效項。 因此,沒有,沒有真正的跨瀏覽器方式僅使用事件對象來做到這一點。
實際上,您可以將$('form').bind('submit'
替換$(':submit').bind('click'
,您的代碼也將正常工作(並且您可以使用this
來查看被點擊的內容)。
為什么在提交時不解除提交功能的綁定? 這樣只能保證提交一次:
$(function() {
$('form').bind('submit', function(event) {
// regular submit form stuff here
...
// and unbind it
$('this').unbind(event);
});
});
在“使用事件對象”下簽出.unbind()
或者,正如Matt Ball在評論中指出的那樣,您可以使用.one()
,與上面的等效。
$(function() {
$('form').one('submit', function(event) { // <== Only executed once
// regular submit form stuff here
...
});
});
如果您有$.post()
或$.get()
提交的表單綁定到多個事件/元素,那么您只需要確保使用event
對象從自身內部解除綁定最終使用的處理程序,然后也取消所有其他處理程序的綁定,反之亦然。 您可以使用大約四種方法之一來取消綁定其他處理程序,以取消綁定事件處理程序 。
為什么不使用.one
函數,以確保僅觸發一次。
$(function() {
$('form').one('submit', function(event) {
// regular submit form stuff here
});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.