2014-10-13 63 views
0

這可能是一個菜鳥問題,但我不能谷歌它或猜測它爲什麼這樣。爲什麼'如果'之前preventDefault和stopPropagation

el.addEventListener(
    'drop', 
    function(e) { 
     if(e.preventDefault) { e.preventDefault(); } 
     if(e.stopPropagation) { e.stopPropagation(); } 
     //... some other code 

現在......我以前只是實現

e.preventDefault(); 
e.stopPropagation(); 

沒有任何「如果的,有人可以給我一個提示,爲什麼我應該把前IFS?

+3

爲了避免出現問題,如果'preventDefault'是不存在的事件對象,這可能是在某些舊的瀏覽器的情況下上。 –

+0

它用於確保在調用它們之前定義了「e.preventDefault」和「e.stopPropagation」。否則它可能會崩潰,並且其後的代碼將不會運行(如果其中任何一個未定義)。 – Winestone

+0

@Winestone - 它不會使頁面「崩潰」。 –

回答

3

它確保preventDefaultstopPropagation確實存在之前執行它們。做同樣的事情的其他方式包括:

var empty = function(){}; 
(e.preventDefault || empty)() 
if(typeof e.preventDefault !== "undefined") e.preventDefault(); 
+0

對於'preventDefault'和'stopPropagation',IE 8及以下版本沒有定義它。但IE 8及以下版本也沒有定義'addEventListener',所以在OP的問題中它有點多餘。 –

+0

@stevuu - 也許'addEventListener'被庫修改並且'preventDefault'可能並不總是存在?這可能是使用它的一個原因。 –

+0

是的,所以主要目的是向後兼容 - 謝謝。 –

相關問題