簡體   English   中英

如何在jquery中找到從表單提交事件中單擊的按鈕?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM