jQuery - 按下角色 - 无论键盘如何

Ste*_*fan 13 javascript jquery character-encoding

我试图用jQuery检索插入到textfield/input中的字符.

我使用通常的:

var character = String.fromCharCode( e.keyCode || e.which );
Run Code Online (Sandbox Code Playgroud)

方法,但唯一的问题是当我使用不同的键盘布局,我刚注意到.

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

例如:如果console.log( character )我得到以下句子:

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

我显而易见的问题是,我怎样才能确保获得真正的字符插入器?

Jør*_*gen 18

按键事件与keyup和keydown事件不同,因为它包含实际按下的键.尝试使用它.使用此代码段检查出来:

$('body').keypress(function(e){
  console.log('keypress', String.fromCharCode( e.which ));
});
$('body').keyup(function(e){
  console.log('keyup', String.fromCharCode( e.which ));
});
Run Code Online (Sandbox Code Playgroud)


pim*_*vdb 6

你可以做的是让角色出现在隐藏的文本框中并获取实际值.这样,你就会得到这个角色.您当前正在传递密钥代码,就像它是字符代码一样.他们不一样.

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
                         }
                     }
                  });
})();
Run Code Online (Sandbox Code Playgroud)