我有 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/