2013-07-12 76 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