我有一个产生大量垃圾邮件的表单。我已完成所需的所有输入并附加了验证码。这没有任何影响。
我假设机器人正在使用
form.submit()
,因为出于某种原因,这绕过了我所有必填字段,并且也绕过了我的 onsubmit="check(e)"
我似乎无论如何都无法抓住这个事件
.submit()
。有谁知道如何赶上这个活动并确保它被取消。我希望提交表单的唯一方法是单击“提交”按钮。
$("#myForm").submit(function(event) {
console.log("Handler for .submit() called.");
if (CaptchaInput.value == "") {
event.preventDefault();
}
});
我的代码应该捕获
.submit()
调用并阻止表单提交。该功能永远不会被触发。
<form target="hidden_iframe"
onsubmit="if (CaptchaInput.value == '') { why += '- Please Enter CAPTCHA Code.\n'; alert(why); return false; };return checkform(this)" id="myForm">
你不能。我可以在不使用浏览器或禁用 JavaScript 的情况下提交您的表单。任何人都可以直接向您的服务器发送 HTTP POST 请求,而无需执行您可能引入的任何客户端流程。
解决您问题的方法是同时在服务器上进行验证,并且不要依赖客户端验证来成功完成(或者实际上,甚至根本不依赖于客户端验证已运行)。
将客户端验证视为对用户的方便,他们会立即看到错误,而无需重新输入并重新提交整个表单。
<div id='contactUs'>
<p><span id='user_message' class='btngover' onclick='go();'>Send</span></p>
<p>
<input id='email' placeholder='Contact email...' autofocus>
<textarea id='subject' placeholder='Message content...'></textarea>
</p>
</div>
function go() {
const email = $('#email').val();
const subject = $('#subject').val();
if (email.trim() === '' || subject.trim() === '') {
alert('All fields are required.');
return;
}
console.log(email + ' ' + subject);
}您可以替换“console.log”,然后通过 Jquery AJAX POST 将其发送到您的 PHP。
onsubmit
属性,以运行验证您的输入的函数。仅当该函数返回 true 时,浏览器才会提交表单。更新: 您只能在表单验证后才能定义操作。
所以,你的 html 看起来像这样:
<form id="myForm" onsubmit="return checkRecaptcha()" action="disabled">
<input type="text" name="myTextInput" value="">
<input type="submit" value="Submit">
</form>
定义该函数的 JavaScript 代码将如下所示:
function checkRecaptcha() {
if (CaptchaInput.value == "") {
document.getElementById("myForm").action="myCorrectUrl";
return true;
} else {
alert("not allowed");
return false;
}
}
然后捕获提交功能:
document.getElementById("myForm").submit = function () {
console.log("catched");
return false;
}