2010-06-17 102 views
89

我:如何获得jquery .val()AFTER keypress事件?

$(someTextInputField).keypress(function() { 
    alert($(this).val()); 
}); 

现在警报始终返回值的按键之前(如该字段为空,我输入“a”和警报给我“”那我的类型。“B”和警报给我'一'...)。但我想要按键后的价值 - 我该怎么做?

背景:只要文本字段包含至少一个字符,我想启用一个按钮。所以我在每个按键事件上运行这个测试,但使用返回的val(),结果总是落后一步。使用change()事件对我来说不是一种选择,因为直到您离开文本框,该按钮才会被禁用。如果有更好的方法做到这一点,我很高兴听到它!

+0

如果该按钮被禁用,如果再次文字被删除?如果是这样,你可能不得不坚持按键。 – Brilliand 2014-01-27 19:00:20

回答

126

变化keypresskeyup

$(someTextInputField).on("keyup", function() { 
    alert($(this).val()); 
}); 

keypress当按键被按下时,该键被释放时keyup被激发被激发。

+0

谢谢,你们很棒! – 2010-06-17 16:26:42

+0

想知道为什么这个伟大的功能是隐藏的那样... – Ron 2012-09-07 12:27:09

+2

钥匙被按下时无法工作... – Brilliand 2012-12-01 00:07:03

3

尝试这样:

$('#someField').keypress(function() { 
    setTimeout(function() { 
    if ($('#someField').val().length > 0) 
     $('#theButton').attr('disabled', false); 
    }, 1); 
}); 

,简单地介绍了超时,使“按键”事件循环完成后,你的代码将紧随其后几乎运行。如此短的计时器间隔(即使通过浏览器四舍五入)也不会引人注目。

编辑 —或者你可能使用“KEYUP”像其他人一样说,虽然它的语义是不同的。

+0

这不是一个benig * smart *的问题。 keyup事件不提供相同的结果。如果你想得到实际的字符被输入(例如&符号),而不是一系列你必须检查shift或ctrl键的状态的关键事件,那么你可以通过按键来获得shift,ctrl等不同的事件是要走的路。 – Ripside 2015-06-05 16:42:53

+0

正确;这就是我所说的“它的语义是不同的”。 – Pointy 2016-05-06 12:53:28

3

您可能需要连接一个onchange事件处理程序,而不是使用任何关键事件。

$(someTextInputField).change(function() { 
    alert($(this).val()); 
}); 

使用Edit > Paste或单击右键,然后粘贴将触发一个更改事件,但不是关键事件。注一些浏览器可能会模拟一个粘贴的关键事件(虽然我不知道任何),但你不能指望那种行为。

4

或者,您可以用0

这样,超时使用keydown事件,这些变化将被立即应用,而不是当用户停止按住按键被应用。

$(someTextInputField).on("keydown", function() { 
    setTimeout(function($elem){ 
    alert($elem.val()); 
    }, 0, $(this)); 
}); 
+0

在按住Backspace的情况下,这仍然会出现奇怪的现象...也许按下超时时间为0的按键? – Brilliand 2014-01-27 16:14:22

+0

啊,没关系,OP没有指定如果文本字段被清除应该发生什么。 – Brilliand 2014-01-27 18:59:08

+0

rlly? 'timeout'?似乎并不是一个好主意 – jose920405 2017-12-15 21:50:20

49

奇怪,没有人提到的JS “输入” 事件:

$(someTextInputField).on('input', function() { 
    alert($(this).val()); 
}); 

推荐。

https://developer.mozilla.org/en-US/docs/Web/Events/input

+7

哇,这是几个未答复/严重回答的SO问题的答案。 – BenRacicot 2015-11-02 19:13:04

+3

当您需要忽略在输入栏中按方向键,移位等时,这也很棒。 – hovado 2015-11-19 14:02:55

+3

这应该是2016年接受的答案! – adarshr 2016-03-10 12:26:08