触发键盘事件,webkit 键盘事件不触发。

问题描述 投票:2回答:1

我的JavaScript代码监听 "返回 "键被按下。适用于除webkit浏览器以外的所有浏览器. 我知道webkits最近 键盘事件处理的变化. 我找不到合适的解决方案 在此详解.

这里是 编码:

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);
javascript keyboard webkit dom-events keypress
1个回答
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. 例如,Opera,两者都有,但只有 addEventListener 是标准化的。

© www.soinside.com 2019 - 2024. All rights reserved.