我想检测文本框的内容何时发生了变化。我可以使用keyup方法,但这也将检测不生成字母的击键,如方向键。我想到了两种使用keyup事件的方法:

显式检查所按键的ascii码是否为字母\backspace\delete 使用闭包来记住在击键之前文本框中的文本是什么,并检查这是否已更改。

两者看起来都有点麻烦。


当前回答

使用闭包来记住按键之前复选框中的文本是什么,并检查它是否已更改。

是的。不一定要使用闭包,但需要记住旧值并将其与新值进行比较。

然而!这仍然不会捕捉每一个变化,因为有一种编辑文本框内容的方法,不涉及任何按键。例如,选择一个文本范围,然后右键单击剪切。或者拖着它。或者从另一个应用程序中删除文本到文本框中。或者通过浏览器的拼写检查更改一个单词。还是……

因此,如果必须检测每个变化,就必须进行轮询。你可以打开窗户。setInterval每(比如说)秒检查字段是否与之前的值对应。您还可以将onkeyup连接到相同的函数,以便更快地反映由按键引起的更改。

麻烦吗?是的。但这就是正常的HTML onchange方式,不要尝试即时更新。

其他回答

“change”事件不能正常工作,但“input”是完美的。

$('#your_textbox').bind('input', function() {
    /* This will be fired every time, when textbox's value changes. */
} );
$(document).on('input','#mytxtBox',function () { 
 console.log($('#mytxtBox').val());
});

您可以使用'input'事件来检测文本框中的内容更改。不要使用'live'来绑定事件,因为它在Jquery-1.7中已弃用,所以要使用'on'。

这个怎么样:

< jQuery 1.7

$("#input").bind("propertychange change keyup paste input", function(){
    // do stuff;
});

jQuery 1.7

$("#input").on("propertychange change keyup paste input", function(){
    // do stuff;
});

这适用于IE8/IE9, FF, Chrome

开始观察“输入”事件而不是“改变”事件。

jQuery('#some_text_box').on('input', function() {
    // do your stuff
});

...这是漂亮和干净的,但可以进一步扩展到:

jQuery('#some_text_box').on('input propertychange paste', function() {
    // do your stuff
});

该代码检测文本框的内容何时被用户更改,何时被Javascript代码修改。

var $myText = jQuery("#textbox");

$myText.data("value", $myText.val());

setInterval(function() {
    var data = $myText.data("value"),
    val = $myText.val();

    if (data !== val) {
        console.log("changed");
        $myText.data("value", val);
    }
}, 100);