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

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

两者看起来都有点麻烦。


当前回答

document.getElementById('txtrate' + rowCount).onchange = function () {            
       // your logic
};

这个工作得很好,但在点击时也会触发事件,这并不好。我的系统进入循环。 而

$('#txtrate'+rowCount).bind('input', function() {
        //your logic
} );

在我的场景中非常适用。它只在值改变时起作用。 可以使用document代替$ sign。getElementById太

其他回答

这里有一个完整的工作示例。

<html>
<title>jQuery Summing</title>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"> </script>
$(document).ready(function() {
$('.calc').on('input', function() {
var t1 = document.getElementById('txt1');
var t2 = document.getElementById('txt2');
var tot=0;
if (parseInt(t1.value))
tot += parseInt(t1.value);
if (parseInt(t2.value))
tot += parseInt(t2.value);
document.getElementById('txt3').value = tot;
});
});
</script>
</head>
<body>
<input type='text' class='calc' id='txt1'>
<input type='text' class='calc' id='txt2'>
<input type='text' id='txt3' readonly>
</body>
</html>

在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');
        }
    });
});

类似这样的东西应该可以工作,主要是因为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);
}

我想问你为什么要检测文本框的内容在实时改变?

另一种方法是设置一个计时器(通过setIntval?),并将上次保存的值与当前值进行比较,然后重置计时器。这将保证捕捉任何变化,无论是由键、鼠标、其他你没有考虑到的输入设备引起的,甚至是JavaScript从应用程序的不同部分改变值(另一种没有人提到的可能性)。

该代码检测文本框的内容何时被用户更改,何时被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);