Javascript 在FireFox中输入密钥陷阱事件
下面的代码适用于IE,但不适用于FireFox 我尝试了下面链接中提出的所有解决方案,但均未成功 按下ENTER键时调用函数。如果放置在功能的第一行,则发出警报。但是,首先,if语句未被处理 通过控件标记中的:onKeyPress=“javascript:isEnter();”调用Javascript 在FireFox中输入密钥陷阱事件,javascript,javascript-events,Javascript,Javascript Events,下面的代码适用于IE,但不适用于FireFox 我尝试了下面链接中提出的所有解决方案,但均未成功 按下ENTER键时调用函数。如果放置在功能的第一行,则发出警报。但是,首先,if语句未被处理 通过控件标记中的:onKeyPress=“javascript:isEnter();”调用 function isEnter(evnt) { evnt = (evnt) ? evnt : ((event) ? event : null); if (evnt) {
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
}
}
}
您的代码更加混乱,您需要它: 函数的第一行:
evnt=evnt | | window.event代码>
这也会起到同样的作用
接下来,charcode行:charcode=evnt.charcode | | event.keyCode | | event.which代码>
这实际上比您的更有效,因为(evnt.charCode | | event.charCode==0)
将始终返回true
x==0
在x
为null
、未定义
、和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
}
}
}
我不记得这是否是获取字符码的最佳方法,但如果您想了解其中的一种,prototype、jQuery、dojo等javascript库将为您抽象出许多浏览器差异。干杯。您的代码比您需要的更令人困惑:
函数的第一行:evnt=evnt | | window.event代码>
这也会起到同样的作用
接下来,charcode行:charcode=evnt.charcode | | event.keyCode | | event.which代码>
这实际上比您的更有效,因为(evnt.charCode | | event.charCode==0)
将始终返回true
x==0
在x
为null
、未定义
、和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
}
}
}
我不记得这是否是获取字符码的最佳方法,但如果您想了解其中的一种,prototype、jQuery、dojo等javascript库将为您抽象出许多浏览器差异。干杯。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
}
}
}
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
}
}
}
谢谢大家
我从另一个渠道得到的。它解决了问题,看起来与上面的答案非常接近,但跳过了if(evnt)部分
如上所述,需要使用以下命令调用:onkeypress=“isEnter(event);”
谢谢大家
我从另一个渠道得到的。它解决了问题,看起来与上面的答案非常接近,但跳过了if(evnt)部分
如上所述,需要使用以下命令调用:onkeypress=“isEnter(event);”
您可以扩展事件:
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");
});
});
测试它:
这里没有jQuery:
扩展方法和触发事件的方法可以位于单独的文件中,例如,可以称为events.js。
你的代码会更干净 您可以扩展事件:
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");
});
});
测试它:
这里没有jQuery:
扩展方法和触发事件的方法可以位于单独的文件中,例如,可以称为events.js。
你的代码会更干净 在从属性传递事件的情况下,不需要第一行。它是用来处理IE的情况的,但是属性onkeypress=“isEnter(event);”中的函数调用已经完成了。在从属性传递事件的情况下,不需要第一行。它是用来处理IE的情况的,但是属性onkeypress=“isEnter(event);”中的函数调用已经完成了。