我的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);
最明显的是下面一行的简单拼写错误。
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
是标准化的。