在keydown / keyup上获取正确输入值的问题

时间:2013-12-17 00:28:27

标签: javascript keyboard jquery

我正在尝试触发某些键组合上的事件,这些键组合会检查它们被触发的输入值。

我遇到的问题是,可以触发keypresskeydown并输入字符而不会触发keyup

enter image description here

相反,只有keyup事件可以读取新输入字符的输入值,因为keydownkeypress在字符添加到输入之前都会触发。

JSFiddle Demo

注意:按shift和任何其他角色。如果您按住shift然后按下并释放另一个角色,keyup事件将会触发,但如果您按下并释放班次与其他键同时,keyup事件不会触发。)

我能想到的唯一解决方案是在keyup事件中触发keydown事件,但这会导致其他地方出现问题。

不幸的是我也不能假设因为他们按下了那个输入字段包含我想要的键组合,因为当输入中有其他字符时,他们可能会输入热键。

这让我想到我必须检查输入的长度,如果它等于零,他们只是按下那个热键,它会触发。

但我想知道是否有更好的方法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

Keypress事件似乎始终如火如荼。有问题的键组合无法触发Keyup,但是它们会触发一个Input事件(就像Keyup一样,在输入值发生变化之后)。但是,输入不包含有关实际击键的信息。

我不知道您在输入内容方面实际上在寻找什么条件。但是听下Keypress,然后在下一个Input事件中获取新的输入内容听起来就像是你需要的。

类似的东西:

var hotkey = false;
var lastChar = '';

$('#in').on('keypress', function(e) {
    hotkey = ((e.which > 16 || e.which < 16) && e.shiftKey);
    lastChar = e.which;    
});


$('#in').on('input', function(e) {
    if (hotkey)
        $("#out").append('<div>' + lastChar + ' + shiftKey triggered ' + '<br/> INPUT: ' + $("#in").val() + '</div>');
});