以下代码适用于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
}
}
}
答案 0 :(得分:2)
onKeyPress="javascript:isEnter();"
有两个原因是错误的:首先,你不应该有javascript:
前缀,因为密钥处理程序属性的全部内容都被处理为JavaScript。这不会阻止您的代码工作,因为javascript:
前缀被解释为标签。阻止它工作的是你没有将事件对象传递给isEnter
函数。您的onkeypress
属性应为
onkeypress="isEnter(event);"
这适用于大多数浏览器。原因是事件处理程序属性的值充当函数的主体,该函数传递名为event
的参数。在IE event
而不是解析为window.event
,因此这种方法适用于大多数浏览器。
您还可以按如下方式简化您的功能:
function isEnter(evnt) {
if (evnt)
var charCode = evnt.keyCode || evnt.which;
if (charCode == 13) {
//do stuff
}
}
}
答案 1 :(得分:2)
谢谢大家。
我从另一个来源得到了这个。它解决了这个问题,看起来非常接近上面的答案,但跳过了if(evnt)部分。
如上所述,有必要调用:onkeypress =“isEnter(event);”
function isEnter(e) {
e = e || window.event || {};
var charCode = e.charCode || e.keyCode || e.which;
if (charCode == 13) {
// do stuff
}
}
答案 2 :(得分:0)
您的代码更加令人困惑,您需要它:
第一行功能:evnt = evnt || window.event;
这将做同样的事情。
接下来,charcode行:charCode = evnt.charCode || event.keyCode || event.which;
这实际上比你的更好,因为(evnt.charCode || event.charCode == 0)
总是返回true。
x == 0
为x
,null
,undefined
和""
时, 0
将返回true。
现在,如果我记得我的HTML事件,我认为您的javascript:isEnter()
函数应该更像这样:isEnter(event)
。您的代码未将事件传递给某些浏览器(例如Firefox)上的函数。
所以,这就是我们所拥有的:
onKeyPress="isEnter(event)"
function isEnter(e) {
e = e || window.event;
if (e) {
var charCode = e.charCode || evnt.keyCode || evnt.which;
if (charCode == 13) {
//do stuff
}
}
}
我不记得这是否是获取charCode的最佳方式,但javascript库如prototype,jQuery,dojo,如果你想查看其中一个,将为你抽象出很多浏览器差异。欢呼声。
答案 3 :(得分:0)
您可以扩展活动:
jQuery.Event.prototype.isEnter = function() {
return this.which == 13;
}
然后使用
e.isEnter();
注意:如果你没有使用jQuery,只需删除“jQuery”。从上面的代码。
你可以做得更好:
$(function(){
$("input:text").keydown(function(e) {
if (e.isEnter()) $(this).trigger("enterPressed", e);
});
});
$(function() {
$("#myfield").bind("enterPressed", function(e) {
console.log("enter pressed");
});
});
测试它:http://jsfiddle.net/TfE6m/
这里没有jQuery:http://jsfiddle.net/zqFer/
您的扩展方法和触发事件的方法可以位于单独的文件中,例如,可以称为events.js。 你的代码会更干净!