0

在我的 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丢失了?

4

1 回答 1

3

现代事件处理有一个更复杂的 API,它提供了更大的灵活性,但代价是无法将行为与简单的布尔结果联系起来。

对于您的用例,您需要捕获事件对象:

function validate(ev) {

然后你可以阻止它的默认操作:

if (!confirm('Confirm')) {
    ev.preventDefault();
}
于 2013-07-12T09:32:55.743 回答