【发布时间】:2018-12-27 07:17:39
【问题描述】:
这个问题看起来很奇怪,但让我告诉你这个故事:
您可能知道从keyup 获得的e.keycode 与keypress 中的e.keyCode 不同,特别是在涉及双语情况时。
例如,当键盘语言是波斯语并且我按下 A 时,按键上的 e.keyCode 返回 1588 而 keyup 上的 e.keyCode 返回 65。
我在处理按键时需要访问 keyup 提供的 e.keycode,我使用了 data(),但是设置值有延迟,如下所示:
$("#textBox").on("keyup", function(e){
var keycode = e.keyCode;
$(this).data('code-on-keyup', keycode);
})
$("#textBox").on("keypress", function(e){
var keycodeOnKeypress = e.keyCode,
keycodeOnKeyup = $(this).data('code-on-keyup');
console.log(keycodeOnKeypress, keycodeOnKeyup);
});
我第一次得到undefined for keycodeOnKeyup,下一次我得到前一步生成的键码。
您可能会建议使用setTimeout() 进行按键,但听起来不太好,我不能将其作为参数发送吗?
你能建议我一种访问它的方法吗?
更新:
感谢@Amadan,这比我想象的要容易,我应该使用keydown 而不是keyup:
$("#textBox").on("keydown", function(e){
var keycode = e.keyCode;
$(this).data('code-on-keydown', keycode);
})
$("#textBox").on("keypress", function(e){
var keycodeOnKeypress = e.keyCode,
keycodeOnKeydown = $(this).data('code-on-keydown');
console.log(keycodeOnKeypress, keycodeOnKeydown);
});
【问题讨论】:
-
“我在处理按键时需要访问 keyup 提供的 e.keycode” 为什么? 为什么不使用并对
keypress事件对象中的值制定逻辑? -
不管为什么,你知道,有需要。我正在创建一个 JavaScript 文件来控制输入的值,想象你输入了几秒钟,过了一会儿你看看显示屏,你发现你的键盘语言是另一种语言,我正在控制用户正在输入的内容并更改它而无需更改键盘语言。
-
keyup发送之后keypress。在keyup之前甚至可以有多个keypress,您需要一台时间旅行机器才能在相应的keypress处理程序中使用keyup事件数据。确定不能使用keydown代替keyup? -
@2oppin 是正确的,但实际上您的代码也可以正常工作。 “我第一次得到未定义的 keycodeOnKeyup 和下一次我从前一步生成的键码。” - 这是因为
keypress事件发生在keyup事件之前。基本上不可能将某些东西从keyup传递到keypress,因为一个发生在另一个之前......
标签: javascript jquery