2014-01-09 61 views
3

我一直在試圖理解爲什麼有時IE8不喜歡PreventDefault,爲什麼有時它似乎是好的(沒有錯誤)。從我讀過的東西,包括在這裏,在這裏是jquery中的事件是正常化的,所以preventDefault將始終存在與jQuery事件。然而,常規javascript事件綁定是當ie8需要以下解決方法時:JQuery PreventDefault和IE8澄清

event.preventDefault ? event.preventDefault() : event.returnValue = false 

這是正確的嗎?

所以,如果你正在使用jQuery。點擊.bind。對等來處理事件,然後的preventDefault不會造成IE8的錯誤,如:

$('a').on('click', function(e) { 
    e.preventDefault(); //no need for e.preventDefault ? e.preventDefault() : e.returnValue = false as jquery event? 
    //code 
}); 

但是,如果它是一個規則的Javascript事件,例如onclick然後解決方法是需要的?

希望是有道理的。

謝謝

+0

聽起來正確 – adeneo

+2

jQuery事件處理程序中的'e'參數不是本機事件對象,而是由jQuery創建的對象。 jQuery事件對象上的'.preventDefault'不是本地的'.preventDefault',而是像第一個例子那樣的包裝器。 –

+0

僅供參考,如果您不支持IE7或更低版​​本,則可以將'.preventDefault()'方法修補到'Event.prototype'中(如果它缺失)。 –

回答

1

是的,你的理解聽起來正確。此外,如果您使用的是「DOM0」事件處理程序(例如someElement.onclick = function(e) { ... }),則可以採用更簡單的方法來防止在支持事件的所有瀏覽器中都可以使用的瀏覽器默認行爲:return false

var someElement = document.getElementById("someElementId"); 
someElement.onclick = function(e) { 
    // Do some stuff 
    return false; 
}; 

然而,在這種情況下,事件不會傳遞到IE < = 8的事件處理程序,你必須從window.event得到它來代替。

+0

謝謝@Tim,不知道爲什麼有人投下你的答案。這不是我,我的名譽點(缺乏)不允許我上下投票答案! – Martin

+0

@Martin:別擔心,偶爾downvote不會打擾我。我想有人會提到使用DOM0事件處理程序的例外。 –