【发布时间】:2022-01-12 18:49:14
【问题描述】:
我有一个这样结构的表单。
<form id="email_subscription_form" class="form-inline float-right" method="post" action="/my-endpoint/">
<div class="form-group">
<label for="id_email_address" class="d-none">Email Address</label>
<input type="email" id="id_email_address" class="form-control border-0 rounded-0" name="email_address" value="" placeholder="Email Address">
<input type="hidden" name="mailpiece_slug" value="{{ page.settings.email_newsletter_slug }}" />
<input type="hidden" name="event_slug" value="subscribe" />
</div>
</form>
我在文件底部还有一个脚本。该脚本的重点是在提交表单之前验证一个recaptcha。这是我的脚本。
<script>
document.getElementById('email_subscription_form').addEventListener('submit', verifyRecaptcha);
function verifyRecaptcha(e) {
e.preventDefault()
return false
}
</script>
根据一些研究,我认为返回 false 的函数会阻止表单提交。但是,表单仍然提交并到达端点。
我也试过这个:
<form id="email_subscription_form" class="form-inline float-right" method="post" action="/my-endpoint/" onsubmit="return verifyRecaptcha()">
和
<form id="email_subscription_form" class="form-inline float-right" method="post" action="/my-endpoint/" onsbubmit="return false">
但表单仍然提交。
我可以做些什么来阻止表单提交直到验证?这是一个 Django 项目,所以模板是 Django 模板。
【问题讨论】:
-
返回 true 或 false 不会阻止提交表单。 e.preventDefault() 是阻止提交表单的原因(jsfiddle.net/asyv3rxc)。
标签: javascript html django forms webforms