2010-06-20 202 views
2

我有JavaScript代碼監聽按下「返回」鍵,
作品在所有瀏覽器,除了WebKit瀏覽器

我知道webkit最近changes to keyboard event handling
我找不到合適的解決方案 in this detailed explanation觸發鍵盤事件,WebKit的鍵盤不會觸發事件

這裏是code

function addEventHandler(node,type,fn){ 
    if(typeof window.event !== "undefined"){ 
      /* Internet Explorer way */ 
      node.attachEvent("on" + type, fn); 
    } else { 
      /* FF & Other Browsers */ 
      node.addEventListener(type, fn,false); 
    } 
} 


function detectSubmit(){ 
    searchTextInput = document.getElementById("txtSearch") 
    addEventHandler(searchTextInput,"keydown",triggerSearch); 
} 

function triggerSearch(e){ 
    //getting the character that was pressed cross browser. 
    var key = e.keycode ? e.keycode : e.which; 
    //detect if the return key was pressed. 
    if(key==13){ 
     alert("return clicked"); 
    } 
} 

    addEventHandler(window,"load",detectSubmit); 
+1

爲什麼不使用jQuery等javascript庫以最少的代碼自動解決跨瀏覽器問題? – Sarfraz 2010-06-20 15:48:52

+0

謝謝,我總是使用jQuery,但這是第三方網站的橫幅廣告。 – adardesign 2010-06-20 15:50:33

回答

2

最明顯的是以下行的簡單的拼寫錯誤:

var key = e.keycode ? e.keycode : e.which; 

應該keyCode而非keycode

除此之外,addEventHandler函數中存在問題。我建議如下:

function addEventHandler(node,type,fn){ 
    if (typeof node.addEventListener !== "undefined"){ 
     /* DOM-compliant method */ 
     node.addEventListener(type, fn,false); 
    } else if (typeof node.attachEvent !== "undefined") { 
     /* IE */ 
     node.attachEvent("on" + type, fn); 
    } 
} 

兩件事情:第一,這是更好地檢查attachEvent,而不是直接從window.event存在推斷出它的存在。實際上,window.event存在於Safari和Chrome中,但不存在(我認爲)attachEvent,因此推理會導致代碼無法正常工作。

其次,最好首先檢查DOM標準addEventListener,並在存在的地方使用它,而不是attachEvent。例如,歌劇有兩種,但只有addEventListener是標準化的。

+0

+1非常感謝您的詳細解釋。 – adardesign 2010-06-20 21:41:33