在我的HTML中,我有一个表单没有一个onsubmit
事件监听器:
<form action="contact.php" method="post" id="contact">
...
<input type="submit" value="Send" />
</form>
因此,只要我点击“发送”按钮,就会始终发布表单。但是,我想首先验证输入,所以我想附加一个事件监听器并拦截帖子。这是我将事件监听器附加到表单的方式:
window.onload = function() {
function validate() {
return window.confirm("Confirm");
}
var form = document.getElementById("contact");
form.addEventListener("submit", validate);
}
当事件监听器正在执行时,如果我按照上面的方法进行操作,表单总是发布!但是,如果我将validate()
函数设为全局并在onsubmit="return validate();"
标记中使用<form>
,则表单只会按预期有条件地提交。
为什么通过添加上述validate()
功能无效?似乎false
返回值丢失了吗?
答案 0 :(得分:3)
现代事件处理具有更复杂的API,它提供了更大的灵活性,但代价是无法将行为与简单的布尔结果联系起来。
对于您的用例,您需要捕获事件对象:
function validate(ev) {
然后您可以阻止对其执行默认操作:
if (!confirm('Confirm')) {
ev.preventDefault();
}