28

我希望在文本框上发生按键时运行一个函数,所以我有以下代码:

$("input[x]").keypress(function() {
        DoX();
    })

这工作正常,但在我的函数中,我想根据文本框中的文本值做一些事情

var textValue = ("input[x]").val();

现在这里的问题是它落后了一个键,所以如果我的文本框显示“He”并且我输入一个“l”,那么我希望我的 textValue 为“Hel”,但它返回之前的值“He”因为大概该字符尚未放入文本框中。

有没有办法让'Hel'脱离我的职能?

谢谢 :)

4

4 回答 4

59

您可以尝试使用 keyup 事件:

$(selector).keyup(function() {
  var textValue = $(this).val();
  DoX();
});
于 2009-09-11T15:21:45.750 回答
27

如果您因其他原因无法使用按键(因此您无法按照建议更改为按键),那么您可以像这样输入最后一个字符:

$("input[x]").keypress(function (e) {
    var c = String.fromCharCode(e.which);
    //process the single character or
    var textValue = $("input[x]").val();
    var fulltext = textValue + c;
    //process the full text

});
于 2009-09-11T15:26:19.140 回答
9

使用onkeyup,它将显示正确的值。

于 2009-09-11T15:20:15.223 回答
0

立即使用 setTimeout。它会在按键事件完成后立即运行,因此您将获得正确的输入值。

$("input[x]").keypress(function() {
  setTimeout(DoX);
});
于 2015-01-24T13:55:40.400 回答