按下瑞典键 å、ä 和 ö 时,jQuery event.keyCode 0

标签 jquery internationalization keyboard-events

我有一个 html 表单,其中有很多文本字段,这些文本字段都只包含一个字符(想想填字游戏)。当在输入字段中输入一个字母时,我使用 jQuery 跳转到下一个字母。除了瑞典字符 åäö(其他国际字符也可能受到影响)之外,这种方法工作得很好。

我将事件监听器绑定(bind)到 keyup 事件,并使用 event.keyCode 和 event.which 来确定按下的键是否是字母(如果是任何特殊键,则事件不受影响地传递)。

问题是,当我按 å、ä 或 ö 时,event.keyCode 和 event.which 均为 0。当我在 Firebug 中检查事件对象时,我找不到任何似乎包含键代码的属性.

代码如下所示:

    var crossword = $('article.crossword');

    crossword.bind('keyup', function(event) {
        var target = $(event.target, crossword);

        if (target.hasClass('crossword_letter_input')) {
            var pressedKey = event.which ? event.which : event.keyCode;
            var target_value = target.val();
            var target_tabindex;

            // Regular alphanumeric keys have keyCodes between 48 and 90.
            if (pressedKey >= 48 && pressedKey <= 90 && target_value.length) {
                target_tabindex = parseInt(target.attr('tabindex'));
                $('input.crossword_letter_input[tabindex=' + (target_tabindex + 1) + ']', crossword).focus();
            }
        }
    });

我使用 keyup 事件来在将字符输入文本字段后移动焦点。

如果您知道任何 jQuery 插件或 vanilla JS 可以完全替代它,那也将是一个解决方案。

编辑:我通过插入以下 else if 进行了临时(且丑陋的)修复:

    // å, ä and ö reports keyCode 0 for some reason.
    else if (pressedKey === 0 && target_value.length) {
        target_tabindex = parseInt(target.attr('tabindex'));
        $('input.crossword_letter_input[tabindex=' + (target_tabindex + 1) + ']', crossword).focus();
    }

这样,我简单地假设,如果 event.which 和 event.keyCode 均为 0,并且字段中值的长度大于 0,则焦点应移至下一个输入。不过,在不知道的情况下假设事情感觉不太好......

最佳答案

键盘上右侧 alt 的键码为 0。当您键入需要使用此 alt 键的字母时,您会从 ket 代码中得到 0。还有其他键也给出代码 == 0(例如 linux 上 FF 上的 windows 键)

此代码(取自 jquery 示例并进行了一些更改)产生了应该足够的内容:

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.4.4.js"></script>
</head>
<body>

<input id="whichkey" value="type something">
<div id="log"></div>
<script>$('#whichkey').bind('keypress',function(e){ 
  $('#log').html(e.type + ': ' +  e.which );
});  </script>

</body></html>

当您输入时,它会被 alt+letter 触发两次 - 一次使用which==0,下一次使用which==正确的字母代码。

例如。

我住的地方 alt+a 产生 ą 并在带有 0 的事件之后的事件中执行正确的代码。 在相同情况下,Keydown 仅发送一次,且代码为 0。

代码:

alt==0
a==97
ą=261

关于按下瑞典键 å、ä 和 ö 时,jQuery event.keyCode 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3865215/

相关文章:

javascript - 在 IE 的文本区域内强制 Javascript 键盘事件

javascript - Typescript:创建 KeyboardEvent 并随时激活/停用它

javascript - 鼠标悬停完成后如何关闭切换?

events - 我在哪里可以找到 LightSwitch 中的关键事件?

jquery - 我如何发布一个等于唯一的 "style = ' 显示 : block'"dropdown menu? 的变量

winforms - 如何在我自己的设计工具中获得 Localizable 属性和支持?

java - 为什么我的 Struts 1 I18N 找不到属性文件?

javascript - i18n 中的嵌套命名空间

javascript - 使用 jQuery 检测键盘按键并为此添加功能

javascript - 当所有选项都未选中时,如何恢复 jQuery Chosen 的数据占位符