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()); });
解除钥匙后会发生这种情况。 我不知道你想要实现什么,但你可以在解除密钥(在keydown
或keypress
)之前存储状态,并在需要时稍后恢复。 您还可以使用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/