javascript - 触发键盘事件,webkit 键盘事件不会触发

标签 javascript keyboard webkit dom-events keypress

我有 JavaScript 代码可以监听按下的“返回”键,
适用于除 webkit 浏览器之外的所有浏览器

我知道最近的 webkit changes to keyboard event handling .
我找不到合适的解决方案 in this detailed explanation .

这是 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);

最佳答案

最明显的是下面这行的简单拼写错误:

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 是标准化的。

关于javascript - 触发键盘事件,webkit 键盘事件不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3079810/

相关文章:

javascript - 使用 $project 在 MongoDB 聚合查询中包含一个 Javascript 变量

javascript - 错误类型错误 : Cannot read property '...' of undefined

javascript - 如何替换不在引号中的字符串

cocoa-touch - 在 applicationDidEnterBackground : - screenshot problem 中隐藏键盘

c++ - 标准键盘驱动程序源代码 - 我在哪里可以找到它?

Javascript: webkitIsFullScreen 属性 IE 等效

javascript - 当我单击事件时,如何以这种方式在 FullCalendar 上格式化日期?

.net - Windows - 将键盘键映射到与鼠标左键相同的操作

javascript - 是否有支持 Chrome 扩展程序的 Chromeless Google Chrome?

iphone - 如何在 WebKit 中使用 CSS 实现摆动动画?