【发布时间】:2019-08-03 06:36:44
【问题描述】:
有没有办法拦截由 JavaScript 触发的表单提交?
我正在尝试通过执行一些客户端验证来减少来自机器人的表单垃圾邮件提交(如果重要,可以借助 reCAPTCHA v2)。当用户提交表单时,我可以通过检查表单的 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 的表单提交是垃圾邮件机器人用来提交表单的方法 - 这表明表单垃圾邮件并未通过这些努力减少。他们能够绕过我的检查。
需要明确的是,第三方表单服务在实际的字段验证服务器端完成了繁重的工作。我只是想首先减少发送到他们服务器的垃圾邮件数量。
是否可以拦截这个基于 JavaScript 的表单提交?我是不是用错误的方式处理这个问题?
编辑:为了澄清,onsubmit 方法确实在通过表单的提交按钮提交表单时被调用。但是当通过 JavaScript (.submit()) 提交表单时它不会被调用。
【问题讨论】:
-
也许他们甚至不使用您的表单向服务器发送垃圾邮件。一个简单的 http 帖子在不使用任何 html 表单元素的情况下进行提交。一种减少垃圾邮件的简单方法(不是防弹的)将在服务器上进行验证,也许还有一些验证码
-
你在哪里设置
valid? -
假设,客户端可以完全操纵您的 javascript,因此您必须 verify the reCAPTCHA request on server side 以防止垃圾邮件
标签: javascript jquery forms spam spam-prevention