2014-03-06 36 views
0

我經常使用以下JavaScript函數將事件附加到DOM中的元素。JS - 附加事件偵聽器並返回

function addEventHandler(elem,eventType,handler){ 
    if (elem.addEventListener){ 
     elem.addEventListener (eventType,handler,false); 
    } 
    else if (elem.attachEvent){ 
     elem.attachEvent ('on'+eventType,handler); 
    } 
} 

我想用它在以下方面的一些AJAX附加到表單元素的onsubmit,然後返回false,這樣的形式實際上沒有提交..

var elemnt = document.getElementById('myForm'); 
addEventHandler(elemnt, 'submit', function(){ 
    // Do stuff 
    return false; 
}); 

在過去我會附加一個事件處理程序,如下所示:onsubmit="return myfunction();"但我無法弄清楚如何在附加事件處理程序時獲取return,所以我的函數可以阻止使用JavaScript提交表單。

這是如何完成的?

+0

http://stackoverflow.com/questions/4950179/javascript-return-false-not-stopping-form-submission。嘗試event.preventDefault() – acbabis

回答

2

嘗試:

var element = document.getElementById('myForm'); 
if (element.addEventListener) { 
    element.addEventListener('submit', myEventHandler); 
} 
else { 
    element.attachEvent('onclick', myEventHandler); 
} 

function myEventHandler(event){ 
    event.preventDefault(); 
    // Do stuff 
} 

更新 event.preventDefault()防止其被調用的方法後的事件的正常處理。 它不會阻止其他事件偵聽器被執行(使用event.stopImmediatePropagation()來做到這一點),但它會取消事件的默認效果。所以在這種情況下,它應該阻止提交表單。

更新2 的JavaScript引擎將調用該事件偵聽器(你的函數),並通過它描述事件的事件對象:它的類型,即事件的目標對象...

有關事件監聽器的詳細說明可用here

+1

一般只提供代碼的答案。你能發表一些解釋,說明如何解決這個問題嗎?謝謝! –

+0

我更新了我的答案。 –

+0

謝謝你,我檢查了w3c和moz。開發者並且無法弄清'event'對象來自哪裏?照顧開導我? –