2013-07-17 238 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