如何拦截由JS事件触发的表单提交(使用纯JS)?
如何拦截由JS事件触发的表单提交(使用纯JS)?
问题的原因是我想在提交表单之前拦截并记录一些数据,但不希望修改每个表单。
解决方法之一是直接在提交时设置action属性,让JS来处理:
function check(){ var form_valid = (document.getElementById('some_input').value == 'google'); if(!form_valid){ alert('Given data is incorrect'); return false; } return true; }
另一种方法是通过脚本来应用这些更改:
for(form in document.querySelectorAll("form")){ form.setAttribute("action", "javascript:check();") }
这样,无论DOM中有多少个表单,都会被拦截并调用check()函数来处理提交。
用户操作提交表单时才会触发事件监听器。
document.getElementById('myform').addEventListener( "submit", function(e){ e.preventDefault(); console.log("not submitting form"); } ); //以下操作不会触发事件监听器: //https://stackoverflow.com/questions/645555 //document.getElementById('myform').submit();
解决方法可能是:
if(validation){ myForm.submit(); }
如何拦截由JS事件触发的表单提交(纯JS实现)?
问题的原因是,当我们通过调用表单的submit方法以编程方式提交表单时,覆盖onsubmit事件似乎会被忽略。因此,我们需要重写表单的submit方法来实现拦截。
解决方法如下:
首先,我们需要在HTML中定义一个表单,并设置其onsubmit事件为我们自定义的函数checkRegistration(),如下所示:
Ignore validation
在JavaScript中,我们需要重写表单的submit方法。首先,存储表单的原始submit方法,然后创建一个拦截函数,并将其覆盖表单的submit方法。在拦截函数中,我们可以进行自定义的验证逻辑。如果验证失败,我们可以提示用户给出的数据不正确,并返回false阻止表单提交。如果验证通过,我们可以应用原始的submit方法继续进行表单提交,如下所示:
var form = document.getElementById('myform'); var tmp = form.submit; form.submit = function(){ var form_valid = (document.getElementById('some_input').value == 'google'); if(!form_valid){ alert('Given data is incorrect'); return false; } tmp.apply(form); }
通过这种方式,我们可以拦截表单提交事件,并在提交之前进行自定义的验证操作。这样,我们可以根据需要对表单进行验证,并决定是否允许表单提交。
这是一个可能的解决方案,虽然需要一些调整,但可能会起作用。您可以根据实际情况将此算法推广到处理任意表单,从而解决您的问题。