簡體   English   中英

為什么 form.submit() 不會觸發“提交”事件?

[英]Why won't form.submit() trigger the “submit” event?

我正在使用 JavaScript .submit() 函數提交我的表單。

form.submit();

但是當我使用 addEventListener 來捕獲我的提交事件時,它不起作用。

form.addEventListener("submit", function(event){
    //codes
});

我發現 addEvenetListener 函數只會監聽 onsubmit 事件而不是提交。 執行 form.submit() 時,是否有其他解決方案可以調用我的函數?

ps:出於某些原因,我需要使用 form.submit() 來提交我的表單而不是使用提交按鈕。

根據MDN

從基於 Gecko 的應用程序調用此方法時,不會觸發表單的 onsubmit 事件處理程序(例如, onsubmit="return false;" )。 通常,不保證 HTML 用戶代理會調用它。

要解決此問題,請嘗試使用dispatchEvent()

 var form = document.querySelector('form'); form.addEventListener('submit', function () { console.log('invoked'); return false; }); // form.submit(); form.dispatchEvent(new Event('submit'));
 <form></form>

而不是使用它然后將事件偵聽器添加到提交

var form = $('form');
form.submit();
form.addEventListener("submit", function(event){
    //codes
});

你可以用這個代替

var form = $('form');
form.submit(function(event){
    // Do something on submit
});

使事件處理程序偵聽按鈕單擊,然后在回調中調用form.submit()

我認為此解決方案比您嘗試的解決方案更有用。 可能有一些語法錯誤。

HTML:

<button onclick="formSubmit()"> Submit form</button>

JavaScript:

function formSubmit()
{
   var form = document.getElementById('formName');
   form[0].submit();
}

如果您不需要支持IE 和 Safari,則可以使用requestSubmit()

與@Patrick Roberts 的dispatchEvent()解決方案不同,這也將驗證表單的內容! 根據MDN

submit() 提交表單,但僅此而已。 另一方面, requestSubmit() 的行為就像點擊了提交按鈕一樣。 表單的內容被驗證,並且只有在驗證成功時才提交表單。 提交表單后,將提交事件發送回表單對象。

或者,如果您有權訪問提交按鈕(我知道 OP 沒有), btn.click()是最受支持的方式,因為它會進行表單驗證並觸發submit事件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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