Javascript 在FireFox中输入密钥陷阱事件

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) {

下面的代码适用于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
            }
        }
    }

您的代码更加混乱,您需要它:

函数的第一行:
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);”中的函数调用已经完成了。