是否可以拦截由JavaScript触发的表单提交?
我正在尝试通过执行一些客户端验证(借助reCAPTCHA v2的帮助,来减少来自bot的表单垃圾邮件提交)。当用户提交表单时,我可以通过检查通过表单的onSubmit属性指定的方法中的标志来确认输入数据已被验证(reCAPTCHA已填写)。
<form ... id="my_form" onSubmit="submitHandler()">
function submitHandler(e) {
if ( !valid ) {
e.preventDefault();
}
}
...或者在通过jQuery .submit()事件处理程序定义的方法中:
$('#my_form').submit(function(e) {
if ( !valid ) {
e.preventDefault();
}
});
问题在于,通过JavaScript提交表单时,这些方法似乎都没有被调用。当我打开控制台并测试通过JavaScript提交...
document.getElementById('my_form').submit()
...表单提交,两个方法均未调用。表单提交事件似乎没有被触发,因此我无法检查数据是否已通过验证。
大概是这种基于JavaScript的表单提交,这是Spambots用来提交表单的方法-跟踪这些事实并未减少表单垃圾邮件的事实。他们能够绕过我的支票。
需要明确的是,第三方表单服务在实际的字段验证服务器端进行了繁重的工作。我只是试图首先减少发送到其服务器的垃圾邮件数量。
是否可以拦截基于JavaScript的表单提交?我采用的是错误的方法吗?
编辑:为澄清起见,通过表单的“提交”按钮提交表单时,将调用onsubmit方法 。但是当通过JavaScript(.submit())提交表单时,不会调用它。