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

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

两者看起来都有点麻烦。


当前回答

你考虑使用变化事件吗?

$("#myTextBox").change(function() { alert("content changed"); });

其他回答

类似这样的东西应该可以工作,主要是因为focus和focusout最终会得到两个不同的值。我在这里使用数据,因为它在元素中存储值,但不涉及DOM。它也是存储与其元素相连接的值的一种简单方法。您也可以轻松地使用范围更高的变量。

var changed = false;

$('textbox').on('focus', function(e) {
    $(this).data('current-val', $(this).text();
});

$('textbox').on('focusout', function(e) {
    if ($(this).data('current-val') != $(this).text())
        changed = true;
    }
    console.log('Changed Result', changed);
}

在HTML/标准JavaScript中使用onchange事件。

在jQuery中这就是change()事件。例如:

$('element').change(function() {// do something});

EDIT

看了一些评论后,你觉得:

$(function() {
    var content = $('#myContent').val();

    $('#myContent').keyup(function() { 
        if ($('#myContent').val() != content) {
            content = $('#myContent').val();
            alert('Content has been changed');
        }
    });
});

你考虑使用变化事件吗?

$("#myTextBox").change(function() { alert("content changed"); });

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

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

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

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

这个怎么样:

< 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