2013-03-12 76 views
1

我有一個按鈕,提交表格preventDefault()不適用於委託目標?

該按鈕已在頁面上。

所以,如果我想阻止提交,我可以這樣做:

$(".myBtn").on('click',function (e){ e.preventDefault();.....});

但如果按鈕即將在未來被注入,我可以這樣做:

$("body").on('click',".myBtn",function (e){ e.preventDefault();.....});

但它不工作,並提交表單。

如果處理程序沒有直接連接到元素本身,而是連接到委託對象,我該如何實現我的目標?

+0

也許嘗試使用表單元素上的提交事件。 – 2013-03-12 13:58:36

+1

這應該沒什麼區別,如果你把一個斷點放在你的點擊處理程序中,可能不會被調用。你100%肯定這個班是'myBtn'嗎? – 2013-03-12 14:00:30

+0

@ClaudioRedi正面。當我執行「live ver 1.9」語法時,它不起作用 – 2013-03-12 14:01:25

回答

1

您不應該將點擊處理程序附加到提交按鈕,以防止提交表單。始終綁定表單的「提交」事件 - 如果用戶按下提交表單而不是點擊提交表單,該怎麼辦?

$(document).on('submit','#your-form',function(e) { 
e.preventDefault(); 
}); 

至於回答你的直接問題,你的代碼應該工作正常。確保您的按鈕具有合適的類名,並確保在您單擊可能導致e.preventDefault()被忽略的按鈕之前或之後,頁面上不會出現JS錯誤。

+0

這不起作用。委託提交事件不可取消。這顯然是jQuery中的一個錯誤。當你點擊e.preventDefault調用時,表單已經發布到服務器。當你直接綁定到表單元素本身時,情況並非如此。 – Triynko 2015-11-18 20:56:07