【问题标题】:jquery keypress() event get textjquery keypress() 事件获取文本
【发布时间】:2010-11-27 13:09:09
【问题描述】:

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

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

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

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

现在的问题是它落后了一个键,所以如果我的文本框显示“He”并且我输入了一个“l”,那么我希望我的 textValue 为“Hel”,但它返回的是以前的值“他”是因为该字符可能还没有被放入文本框中。

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

谢谢:)

【问题讨论】:

    标签: jquery textbox keypress


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      $("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
      
      });
      

      【讨论】:

      • ("input[x]").val() 应该是:$("input[x]").val() 甚至更好:$(this).val() 甚至更好:this.value
      • 在我遇到这种方法的问题后提出警告 - 它假定光标始终位于文本框文本的末尾。例如,如果您键入 E-S-T-Home-T,在普通编辑器窗口中您会得到“TEST”,但这个 JS 会导致“ESTT”。
      【解决方案3】:

      你可以尝试使用keyup事件:

      $(selector).keyup(function() {
        var textValue = $(this).val();
        DoX();
      });
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2011-03-27
          • 2015-06-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-08
          • 1970-01-01
          相关资源
          最近更新 更多