下面的代码可以在IE中运行,但不能在FireFox中运行。
我已经尝试了下面链接中提出的所有解决方案,但均未成功。
按下ENTER键时调用函数。如果将警报放在函数的第一行,但第一个if语句未处理,则会触发警报。
调用途径:控件标记中的onKeyPress="javascript:isEnter();"
。
function isEnter(evnt) {
evnt = (evnt) ? evnt : ((event) ? event : null);
if (evnt) {
var charCode = (evnt.charCode || evnt.charCode == 0) ? evnt.charCode : ((evnt.keyCode) ? evnt.keyCode : evnt.which);
if (charCode == 13) {
//do stuff
}
}
}
4条答案
按热度按时间guykilcj1#
onKeyPress="javascript:isEnter();"
是错误的,原因有两个:首先,你不应该有javascript:
前缀,因为键处理程序属性的全部内容都是作为JavaScript处理的。这不会妨碍你的代码工作,因为javascript:
前缀被解释为一个标签。妨碍它工作的是你没有向isEnter
函数传递一个事件对象。你的onkeypress
属性应该是这在大多数浏览器中都是可行的。原因是事件处理程序属性的值充当了函数的主体,该函数传递了一个名为
event
的参数。在IE中,event
改为解析为window.event
,因此这种方法在大多数浏览器中都是可行的。您还可以按如下方式简化函数:
r9f1avp52#
谢谢大家。
我从另一个来源得到了这个。它解决了这个问题,看起来非常接近上面的答案,但是跳过了if(evnt)部分。
如上所述,有必要致电:onkeypress ="是输入(事件);"
9bfwbjaz3#
您的代码更容易混淆,而您需要它:
函数的第一行:
evnt = evnt || window.event;
这也会做同样的事情。接下来是charcode行:
charCode = evnt.charCode || event.keyCode || event.which;
这实际上会比你的更好,因为(evnt.charCode || event.charCode == 0)
将 * 总是 * 返回true。当
x
为null
、undefined
、""
和0
时,x == 0
将返回真。现在,如果我还记得我的HTML事件,我认为
javascript:isEnter()
函数应该看起来更像这样:在某些浏览器(例如Firefox)上,您的代码没有将事件传递给函数。所以,这就是我们的成果:
我不记得这是否是获得charCode的最佳方式,但javascript库,如prototype、jQuery、dojo,将为您抽象出许多浏览器差异,如果您想查看其中之一的话。
ac1kyiln4#
您可以将事件:
然后使用
注意:如果您没有使用jQuery,只需从上面的代码中删除"jQuery."。
您可以让它变得更好:
测试:http://jsfiddle.net/TfE6m/
这里没有jQuery:http://jsfiddle.net/zqFer/
你的扩展方法和触发事件的方法可以放在一个单独的文件中,比如说,可以叫做events.js,这样你的代码会更干净!