按键比价值更快?

时间:2012-02-13 16:21:10

标签: jquery keypress

我有this代码:

<input id="inputBox" />

$('#inputBox').keypress(function(event) {
    console.log($(this).val());
});

我期望的是,当我在输入框中插入一个值时,在控制台上打印它。相反,在第一个值,我得到(an empty string),第二个值,第一个值,依此类推......

为什么呢?我该如何解决?我还阅读了官方document,但没有关于这种行为!

4 个答案:

答案 0 :(得分:2)

不......

keypress在指定的值之前被解雇 像所有其他事件一样(点击,提交等等......),你可以取消默认行为和“东西”

$('#inputBox').keypress(function(event) {
    return false; // this will disable the new value assignment
});

您可以找到使用event.which点击的按钮并使用它。

示例:

<input id="gdoron" />​

$('#gdoron').keypress(function(e){
    var value = $(this).val(); 
    alert(value);
    alert(value + String.fromCharCode(e.which))
})​

<强> JSFiddle DEMO

答案 1 :(得分:2)

这里的问题是使用触发不同键盘事件的点。要实现您的目标,请改用keyup

$('#inputBox').keyup(function(event) {
    console.log($(this).val());
});

Updated fiddle

答案 2 :(得分:2)

所有关于事件发生的时间。以下是它的工作原理:

onKeyDown - &gt; onKeyPress - &gt;输入值已修改 - &gt;的onkeyup

如果你处理onKeyUp事件,你将保证在所有浏览器中输入元素中都有正确的值。

如果您需要有关修改键和跨浏览器实现的信息,QuirksMode会有very detailed article

答案 3 :(得分:0)

3 different key*-events。听起来像keyup()是你应该使用的。