【发布时间】:2010-10-05 15:32:23
【问题描述】:
我有一个包含很多文本字段的 html 表单,这些文本字段都只包含一个字符(想想填字游戏)。当在输入字段中输入一个字母时,我使用 jQuery 跳转到下一个。这工作正常,除了瑞典字符 åäö(其他国际字符可能也会受到影响)。
我将一个事件侦听器绑定到 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,那么焦点应该转移到下一个输入。假设不知道的东西虽然感觉不太好......
【问题讨论】:
标签: jquery internationalization keyboard-events