2013-07-12 44 views
0

添加到表单在我的HTML我有一个形式没有一个onsubmit事件侦听器:凡的onsubmit在Javascript

<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()函数设为全局函数并在<form>标记中使用onsubmit="return validate();",则表单仅按预期的条件提交。

为什么通过添加上面的validate()函数不起作用?看来false返回值会丢失?

回答

3

现代事件处理有一个更复杂的API,它提供了更多的灵活性,但这是以不能将行为绑定到简单的布尔结果为代价的。

对于你的使用情况,您需要捕获的事件对象:

function validate(ev) { 

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

if (!confirm('Confirm')) { 
    ev.preventDefault(); 
} 
+0

嗯...我添加了'EV。 preventDefault();'它工作得很好。我是否仍然需要返回false? – Jens

+0

不,您只需调用事件对象上的方法。 – Quentin

+0

谢谢昆汀。还有一个问题:当我直接附加到'

'时,为什么'返回false'工作,而当我通过'addEventListener()'时,并不是这样。交付/检查事件的不同方式? – Jens