2013-07-17 236 views
0

如果我這樣做,我可以防止表單默認提交就好:如何防止表單提交默認?

document.getElementById('my-form').onsubmit(function(e) { 
    e.preventDefault(); 
    // do something 
}); 

但由於我在一個模塊化的方式組織我的代碼,我處理這樣的事件:

document.getElementById('my-form').addEventListener('onsubmit', my_func); 

var my_func = function() { 
    // HOW DO I PREVENT DEFAULT HERE??? 
    // do something 
} 

哪有我現在預防默認?

+2

同樣的方法。瀏覽器(不錯,體面的)傳遞事件對象作爲參數。 – Pointy

+0

LOL如果你想成爲壞人,你總是可以把'

' – Banning

+0

注意:當使用['onclick'屬性](https://developer.mozilla.org/en-US /docs/Web/API/GlobalEventHandlers.onclick),只需設置它:'elem.onclick = function(){...};'。否則,你試圖用新的處理器作爲參數來調用以前的處理器。 –

回答

6

實際上也是這樣! demo

一些HTML

<form id="panda" method="post"> 
    <input type="submit" value="The Panda says..."/> 
</form> 

你的JavaScript

// your function 
var my_func = function(event) { 
    alert("me and all my relatives are owned by China"); 
    event.preventDefault(); 
}; 

// your form 
var form = document.getElementById("panda"); 

// attach event listener 
form.addEventListener("submit", my_func, true); 

注:使用.addEventListener時,你應該使用submitonsubmit。注意2:由於您定義my_func的方式,請務必在定義函數後致電addEventListener,這一點很重要。 JavaScript使用hoisting,因此在使用var來定義函數時需要注意事物的順序。

瞭解更多關於addEventListenerEventListener接口。

+0

不,'返回false '不像你想象的那樣工作。也許在jQuery中,但絕對不會使用'addEventListener' – Ian

+0

@Ian,我更新了我的答案。抱歉! – naomik

+0

看起來不錯(包括你最近關於起重的編輯):) – Ian