Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript event.keycode在firefox中未返回正确的值_Javascript_Jquery_Events_Keypress_Keycode - Fatal编程技术网

Javascript event.keycode在firefox中未返回正确的值

Javascript event.keycode在firefox中未返回正确的值,javascript,jquery,events,keypress,keycode,Javascript,Jquery,Events,Keypress,Keycode,当在输入框中按下空格键时,我正在尝试以下代码来触发js方法 <input id="j1" /> $('#j1').keypress (function (event){ alert(event.keycode) }); $('#j1')。按键(功能(事件){ 警报(event.keycode) }); 在firefox中,只有当按下enter键时,才会返回正确的值,其他键每次返回的值都是0。在IE/chrome中,这非常有效。问题在于并非所有浏览器

当在输入框中按下空格键时,我正在尝试以下代码来触发js方法

  <input id="j1" /> 

  $('#j1').keypress (function (event){
       alert(event.keycode)
  });

$('#j1')。按键(功能(事件){
警报(event.keycode)
});

在firefox中,只有当按下
enter
键时,才会返回正确的值,其他键每次返回的值都是0。在IE/chrome中,这非常有效。

问题在于并非所有浏览器在按键上都有相同的实现。解决方案是检查注册
密钥的所有可能位置。在这种情况下:
event.keycode
event.which

有关更多信息,请参阅本文

编辑

终于找到了我的旧函数,这是我实际使用的代码:

evt = (evt) ? evt : event;
var charCode = evt.which || evt.charCode || evt.keyCode || 0;

在非IE浏览器中,您希望在
keypress
事件中使用
which
charCode
属性,而不是
keyCode
属性。
keypress
事件用于检测键入的字符,而
keyup
keydown
用于检测物理键(在这些事件中,
keyCode
在每个主要浏览器中都起作用)

但是,jQuery使用类似于此的代码规范化按键事件的
属性,因此在jQuery中您只需要

var charCode = event.which;

有关键事件的(更多)详细信息,请参阅。

如果
事件.keyCode
没有返回正确的值,那么对于firefox,您可以使用
事件.charCode

var keyValue = event.charCode || event.keyCode;
KeyboardEvent.keyCode: 不同浏览器之间的按键事件值不同。IE和 Google Chrome设置KeyboardEvent.charCode值。壁虎设置0如果 按下的键是可打印的键,否则会设置相同的键码 作为keydown或keydup事件

所以从Firefox的角度来看,它实际上返回了正确的值。看

keyCode
哪些
keyIdentifier
charCode
不推荐使用

此功能已从Web标准中删除。虽然一些浏览器可能仍然支持它,但它正在被开发中 下降。避免使用,并尽可能更新现有代码

keyIdentifier
在IE和Firefox中不受支持,已从Opera和Chrome中删除
charCode
作为非标准

此功能是非标准的,不在标准轨道上。不要在面向Web的生产站点上使用它:它不会适用于所有用户。实现之间也可能存在很大的不兼容性

那么,还有什么选择呢

I.改用
属性 保存与按下的键对应的键属性值

示例: “a”、“a”、“@”、“百分比”、“美元”、“ا”、“ب”、“㶡”、“ت”、“١”、“٢”、“٣”、“制表符”、“输入”,所有“F1”`

它赢得了所有主流浏览器(Firefox52、Chrome55、Safari10.1、Opera46)的支持,但InternetExplorer11除外 非标准密钥标识符和AltGraph的错误行为
如果这一点很重要,并且/或者向后兼容性很重要,那么您可以在以下代码中使用功能检测:

请注意,
key
值与
keyCode
的属性不同,因为它包含键的名称,而不是其代码。如果程序需要字符代码,则可以使用
charCodeAt()
。 对于单个可打印字符,如果要处理其值包含多个字符(如ArrowUp)的键,则可以使用
charCodeAt()
机会是:您正在测试特殊密钥,并采取相应的措施。因此,请尝试实现一个键值表及其对应的 代码
charCodeArr[“ArrowUp”]=38
charCodeArr[“Enter”]=13
charCodeArr[Escape]=27
。。。等等,请看一下他们的

二、 您还可以使用
code
属性: 保存一个字符串,该字符串标识正在按下的物理键。这个 值不受当前键盘布局或修改器的影响 状态,因此特定键将始终返回相同的值

它具有类似于
属性的效果,并且对于带有QUERTY的美国键盘上按下的按钮W,它的输出类似于
“keyW”
布局。如果在另一个版面(AZERTY)或另一种语言(希伯来语)中按下同一按钮,或与修改器组合使用 (shift),
key
属性将相应更改,而
code
属性仍将具有相同的值
“keyW”
更多关于这个

Chrome 49、Firefox 52、Safari 10.1和Opera 46支持
code
属性,但Internet Explorer不支持该属性

另见:


  • 如果无论按哪个键都得到
    0
    ,请尝试使用
    charCode
    而不是
    keyCode

    这是因为您正在调用使用
    which
    charCode
    的KeyboardEvent对象,而不是使用
    keyCode
    返回键盘Unicode值的事件对象。有关更多信息,请参阅MDN web文档以了解有关键盘事件的更多信息:

    在firefoxyes中,这将返回未定义的
    回车
    ,但OP正在尝试捕捉
    空格键(
    keypress=),感谢您指出这一点。实际上是在运行中输入的=)编辑的版本应该可以工作
    evt.which | | | evt.charCode | | evt.keyCode | | 0
    -50%space@Rolando,@SomeGuy:另外,根本不需要使用
    charCode
    。每个支持
    charCode
    的浏览器也支持
    哪个
    ,有些(Opera)只支持
    哪个
    var keyValue = event.charCode || event.keyCode;
    
    readonly attribute DOMString key
    
    if(e.key!=undefined){
            var characterCode = charCodeArr[e.key] || e.key.charCodeAt(0);
        }else{
            /* As @Leonid suggeted   */
            var characterCode = e.which || e.charCode || e.keyCode || 0;
        }
            /* ... code making use of characterCode variable  */  
    
    readonly attribute DOMString code