jQuery键盘事件

使用jQuery,我想捕获一个键盘事件:

  • 用户从钥匙上抬起手指之前
  • 键盘事件中的字符在输入框中注册后。

为了澄清,请查看此示例 。 当keypress触发时, input值尚未更新。

[编辑]

显然我不清楚我需要什么。

在用户从键上抬起手指之前必须调用该函数,但是将键的字符放在输入框中之后。 所以以下不起作用:

  • keydown:在keypress事件中,文本框中的值尚未更新
  • keypress:在keypress事件中,文本框中的值尚未更新
  • keyup:当用户抬起手指时调用它,这为时已晚。

您可以使用input事件,该事件适用于所有主流浏览器的最新版本:

 var input = document.getElementById("your_input_id"); input.oninput = function() { alert(input.value); }; 

不幸的是,它在IE <= 8中不起作用。但是,在这些浏览器中,您可以在value属性上使用propertychange事件:

 input.onpropertychange = function() { if (window.event.propertyName == "value") { alert(input.value); } }; 

常规JavaScript 回答者@Andy E在他的博客上详细介绍了这一点: http : //whattheheadsaid.com/2011/10/update-html5-oninput-event-plugin-for-jquery

使用keyup事件 , jsFiddle上的一个例子

 $("textarea").keyup(function(e){ alert($(this).val()); }); 

解除钥匙会发生这种情况。 我不知道你想要实现什么,但你可以在解除密钥(在keydownkeypress )之前存储状态,并在需要时稍后恢复。 您还可以使用e.preventDefault()keyup事件中停止输出 ,因此即使在键启动后,它也不会在区域中注册值。

您可以侦听keydown事件并将值存储在变量中。 该变量将具有新输入之前的值,并且新输入将包含在keyup事件中

更新:

好的,我误解了你的要求,但没有一个能满足你需求的活动。 我能想到的唯一可以模拟这种行为的是:

  • keydown/keypress
  • event对象中获取值(获取event.which ,然后将其转换为实际值)
  • 使用我在原始建议中提到的变量,并将新输入连接到它

这是一个小提琴: http : //jsfiddle.net/HpXuU/13/

这显然不是一个完美的解决方案,因为它需要一些(可能认为不必要的)工作才能正确完成。 我建议重新考虑你的需求,但如果这种行为绝对是你所需要的,我认为这是朝着正确方向迈出的一步。

你可以使用setTimeout

 $('input').keypress(function() { var that = this; setTimeout(function() { // read that.value }, 0); }); 

现场演示: http //jsfiddle.net/HpXuU/8/