Javascript 不带提交按钮的提交触发

Javascript 不带提交按钮的提交触发,javascript,forms,validation,submit,onsubmit,Javascript,Forms,Validation,Submit,Onsubmit,我卡住了,试图使用提交函数(formElement.submit())提交表单。 实际上,它确实会将表单输入值发送到后端,但我试图阻止它,并在两者之间添加ajax 杰德/帕格 form#score-form(method="POST" action="/leaderboard") input#submit-score(type="hidden" value="" name="submitscore") //value is fetched from JS JS 但是,当使用su

我卡住了,试图使用提交函数(formElement.submit())提交表单。 实际上,它确实会将表单输入值发送到后端,但我试图阻止它,并在两者之间添加ajax

杰德/帕格

form#score-form(method="POST" action="/leaderboard")
    input#submit-score(type="hidden" value="" name="submitscore")
    //value is fetched from JS
JS

但是,当使用submit按钮时,它会按预期工作

form#score-form(method="POST" action="/leaderboard")
    input#submit-score(type="hidden" value="" name="submitscore")
    button(type="submit")

scoreForm.submit();
scoreForm.addEventListener('submit', function(){
    console.log("works"); //logs works
});
除了.submit()似乎不调用onsubmit之外,一切都正常。是否有任何变通方法(可以使用vanilla js)来提示程序表单已提交,即使使用.submit()


谢谢

您需要在实际提交之前添加侦听器:

scoreForm.addEventListener('submit', function(){
    console.log("works"); //logs works
});
scoreForm.submit();
否则,事件将在您设置侦听器之前触发

编辑:看来我误解了你的要求。您要寻找的答案是
submit()
不会触发侦听器。您可以通过使用
click()
以编程方式单击按钮来模拟它。对这种行为的解释。尝试:

scoreForm.querySelector('input[type="submit"]').click()

你确定在调用事件之前注册了事件侦听器吗?啊,实际上我没有。这和.click()模拟非常有效,谢谢:)是的,就是这样!谢谢
scoreForm.querySelector('input[type="submit"]').click()