代码之家  ›  专栏  ›  技术社区  ›  Attila Kun

如何通过jQuery在按键事件期间获取HTML文本输入的新值?

  •  5
  • Attila Kun  · 技术社区  · 14 年前

    我只能检索没有新按下的键的值。使用 keyup

    旧值与旧值的结合 keyCode 从事件的参数可以访问的属性也不可接受,因为不能保证用户将在文本框中键入字符串的末尾。

    4 回复  |  直到 4 年前
        1
  •  2
  •   Tim Down    14 年前

    可以计算出按键后的数值。这在非IE浏览器中很容易,在IE中则更为棘手,但以下几点可以做到:

    document.getElementById("your_input").onkeypress = function(evt) {
        var val = this.value;
        evt = evt || window.event;
        var charCode = typeof evt.which == "number" ? evt.which : evt.keyCode;
        if (charCode) {
            var keyChar = String.fromCharCode(charCode);
            var start, end;
            if (typeof this.selectionStart == "number" && typeof this.selectionEnd == "number") {
                start = this.selectionStart;
                end = this.selectionEnd;
            } else if (document.selection && document.selection.createRange) {
                // For IE up to version 8
                var selectionRange = document.selection.createRange();
                var textInputRange = this.createTextRange();
                var precedingRange = this.createTextRange();
                var bookmark = selectionRange.getBookmark();
                textInputRange.moveToBookmark(bookmark);
                precedingRange.setEndPoint("EndToStart", textInputRange);
                start = precedingRange.text.length;
                end = start + selectionRange.text.length;
            }
            var newValue = val.slice(0, start) + keyChar + val.slice(end);
            alert(newValue);
        }
    };
    
        2
  •  7
  •   SLaks    14 年前

    将处理程序代码包装在 setTimeout(function() { ... }, 0) .

    这将在下一个消息循环中,在 value 已更新。

        3
  •  1
  •   Community kfsone    7 年前

    这里有一个可能有用的主意。使用keypress并将val存储在该点,这样您就可以始终比较当前值和最后一个值,并找出字符串中的差异。不同的是按下的键。

    一种方法是将字符串转换为数组,并像这里一样比较这两个数组: JavaScript array difference

    从来没有尝试过这样的事情,所以它可能不可行,但可能值得一试。

        4
  •  0
  •   Kosau    12 年前

    $("#container").keydown(function (e) {
       //here you decide whether to handle the key event, and grab the control that sent the event 
       var myInput = e.target;
       $("#container").one('keyup', function() {
          console.log(myInput.val());  
          // do smth here
       });
    });