jQuery -得到字符按-不管键盘

jQuery - get character pressed - REGARDLESS of Keyboard

本文关键字:不管 键盘 jQuery 字符      更新时间:2023-09-26

我试图检索插入到jQuery文本字段/输入的字符。

我用常用的:

var character = String.fromCharCode( e.keyCode || e.which );

方法,但唯一的问题发生在我使用不同的键盘布局时,我刚刚注意到。

例如,在标准美国键盘上,它工作得很好。例如,在德语键盘上,如果我将语言设置为英语-基本上将其呈现为标准的美国键盘,当我按下相当于:;'',./[]=-的字符时,我得到了我在键盘上实际看到的德语字符(尽管与之对应的英语字符被添加到输入中)。

示例:如果我为下面的句子console.log( character ),我得到:

  • 输入:[]'';/.,
  • 控制台中:ÛݺÞܼ¾¿

我明显的问题是,我怎样才能确保得到真正的字符插入器?

keypress事件不同于keyup和keydown事件,因为它包含实际按下的键。试着用它来代替。用下面的代码片段检查一下:

$('body').keypress(function(e){
  console.log('keypress', String.fromCharCode( e.which ));
});
$('body').keyup(function(e){
  console.log('keyup', String.fromCharCode( e.which ));
});

您可以做的是使字符出现在一个隐藏的文本框中,并获取实际值。这样,您将得到字符。您当前正在传递代码,就好像它是一个字符代码一样。它们不一样。

http://jsfiddle.net/RQQpT/

(function() {
    var input = $("<input>").appendTo('body') // an hidden input element
                            .css({ position: "absolute",
                                   left:     -500,
                                   top:      -500       });
    $('body').bind({ keydown: function(e) {
                         input.focus(); // make characters appear in input element
                     },
                     keyup: function() {
                         var value = input.val(); // get value when key pressed
                         input.val(""); // reset value of input element
                         if(value) {
                             alert(value); // if there is a value, display it
                         }
                     }
                  });
})();