2012-02-03 28 views
1

問題stopPropagation()進行的KeyboardEvent

我怎樣才能成功地預防的KeyboardEvent冒泡,沒有在事件處理程序後立即做了return false

注:該事件是KeyboardEvent型的,我使用jQuery我,所以e.stopPropagation()不是一個選項(有沒有當我console.logKeyboardEvent對象這樣的方法)。

更多信息

事件記錄通過本機方法(addEventListener()attachEvent(),根據瀏覽器)的約束,並且缺省值是使用此功能取消:

this.cancelHandler = function(event) { 
    /** 
    * Cross browser event cancellation (e.preventDefault() is not available without jQuery 
    */ 

    var e = event || window.event; 
    // All good browsers… 
    if (e.preventDefault) {e.preventDefault();} 
    // …and IE 
    if (e.returnValue) {e.returnValue = false;} 

    return false; 
}; 

防止來自發射的默認值,但它不會停止對這些KeyboardEvent s的傳播。

我在找什麼兼容至少 IE7 +和現代瀏覽器。

回答

2

使用這段代碼

e.cancelBubble = true; 
if(e.stopPropagation) e.stopPropagation(); 

stopPropagation不是jQuery的,但是非標準的功能(當然不是即非標準)

+0

這在我看來是正確的解決方案太(是這樣的:'如果(typeof運算e.cancelBubble ==='boolean'){e.cancelBubble = true;}',以防某些舊瀏覽器沒有此屬性)。不幸的是,這並沒有解決我的情況。然而,我發現了一個「黑客」的方法:使用'setTimeout'延遲事件處理程序中的代碼,該代碼還*監聽'keydown'。通過這種方式,事件就會下降,並在執行將要監聽未來事件的代碼之前消失很久。 (雖然討厭,但應該可以註冊更多的聽衆,但是防止當前的事件冒泡......) – Jacob 2012-02-03 14:35:49