Javascript 如何在按键事件后获取jquery.val()?

Javascript 如何在按键事件后获取jquery.val()?,javascript,jquery,events,forms,javascript-events,Javascript,Jquery,Events,Forms,Javascript Events,我得到: 现在,警报总是在按键之前返回值(例如,字段为空,我键入“a”,警报给我“”然后我键入“b”,警报给我“a…”)。但是我想要按键后的值-我怎么做 背景:我想在文本字段包含至少一个字符时启用按钮。所以我对每个按键事件都运行这个测试,但是使用返回的val()结果总是落后一步。使用change()事件对我来说不是一个选项,因为在您离开文本框之前,按钮将被禁用。如果有更好的方法,我很高兴听到 将按键更改为按键: $(someTextInputField).keypress(function()

我得到:

现在,警报总是在按键之前返回值(例如,字段为空,我键入“a”,警报给我“”然后我键入“b”,警报给我“a…”)。但是我想要按键后的值-我怎么做


背景:我想在文本字段包含至少一个字符时启用按钮。所以我对每个按键事件都运行这个测试,但是使用返回的val()结果总是落后一步。使用change()事件对我来说不是一个选项,因为在您离开文本框之前,按钮将被禁用。如果有更好的方法,我很高兴听到

按键
更改为
按键

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

按下按键时会触发
keypress
,松开按键时会触发
keypup

使用

代替按键,尝试以下操作:

$(someTextInputField).on("keyup", function() {
  alert($(this).val());
});
这只是引入了一个超时,这样在“keypress”事件循环完成后,您的代码将几乎立即运行。如此短的计时器间隔(即使浏览器将其四舍五入)不会引起注意


编辑-或者您可以像其他人所说的那样使用“keyup”,尽管其语义不同。

您可能希望连接一个
onchange
事件处理程序,而不是使用任何键事件

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

使用
Edit>Paste
或右键单击然后粘贴将触发更改事件,但不会触发键事件。注意:一些浏览器可能会在粘贴上模拟一个键事件(尽管我不知道有),但您不能指望该行为。

或者,您可以使用超时为0的keydown事件

这样,更改将立即应用,而不是在用户停止持有密钥时应用

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

很惊讶没有人提到js“input”事件:

推荐的


@Brillian你说得对。我为此做了一个变通办法,如下所示。你是如何在iPhone/Android设备上实现这一点的?他们不支持按键功能。按键的定义不完全正确。这就是键控的定义。在按住Backspace键的情况下,这仍然会表现得很奇怪。。。可能是超时为0的按键?啊,没关系,OP没有指定如果文本字段被清除会发生什么。如果文本被删除,按钮是否应该再次被禁用?如果是这样的话,你可能不得不坚持按键盘。这不是benig smart的问题。keyup事件不提供相同的结果。使用keyup键,您可以获得shift、ctrl等不同的事件-如果您想获得正在键入的实际字符(如一个符号),而不是一系列必须检查shift或ctrl键状态的键事件,则可以使用keypress键;这就是我所说的“它的语义不同”。哇,这是对几个未回答/回答不好的SO问题的回答。当您需要忽略输入字段中的箭头键、shift等时,这也很好。比较好的浏览器支持。回答比听每一个键都好得多。它救了我一天!非常感谢。我使用了以下代码:$('.subject_-mark')。在(“输入”,函数(){var$th=$(this);$th.val($th.val().replace(/[^0-9]/g,函数(str){return';}));
$(someTextInputField).on("keydown", function() {
  setTimeout(function($elem){
    alert($elem.val());
  }, 0, $(this));
});
$(someTextInputField).on('input', function() {
  alert($(this).val());
});