如何拦截由JS事件触发的表单提交(使用纯JS)?

14 浏览
0 Comments

如何拦截由JS事件触发的表单提交(使用纯JS)?

这里有一个关于如何使用addEventListener在表单上拦截SUBMIT的很好的答案。只要通过提交按钮(或按下回车键)提交表单,它就会很好地工作。然而,当像这样触发时,它完全被忽略:\n

document.getElementById('myform').submit();

\n你该如何拦截这样的调用?\n以下是示例:\n


输入google以访问google...
忽略验证

0
0 Comments

如何拦截由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()函数来处理提交。

0
0 Comments

用户操作提交表单时才会触发事件监听器。

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();
}

0
0 Comments

如何拦截由JS事件触发的表单提交(纯JS实现)?

问题的原因是,当我们通过调用表单的submit方法以编程方式提交表单时,覆盖onsubmit事件似乎会被忽略。因此,我们需要重写表单的submit方法来实现拦截。

解决方法如下:

首先,我们需要在HTML中定义一个表单,并设置其onsubmit事件为我们自定义的函数checkRegistration(),如下所示:

Write google to go to google..
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);
}

通过这种方式,我们可以拦截表单提交事件,并在提交之前进行自定义的验证操作。这样,我们可以根据需要对表单进行验证,并决定是否允许表单提交。

这是一个可能的解决方案,虽然需要一些调整,但可能会起作用。您可以根据实际情况将此算法推广到处理任意表单,从而解决您的问题。

0