我想检测文本框的内容何时发生了变化。我可以使用keyup方法,但这也将检测不生成字母的击键,如方向键。我想到了两种使用keyup事件的方法:
显式检查所按键的ascii码是否为字母\backspace\delete 使用闭包来记住在击键之前文本框中的文本是什么,并检查这是否已更改。
两者看起来都有点麻烦。
我想检测文本框的内容何时发生了变化。我可以使用keyup方法,但这也将检测不生成字母的击键,如方向键。我想到了两种使用keyup事件的方法:
显式检查所按键的ascii码是否为字母\backspace\delete 使用闭包来记住在击键之前文本框中的文本是什么,并检查这是否已更改。
两者看起来都有点麻烦。
当前回答
开始观察“输入”事件而不是“改变”事件。
jQuery('#some_text_box').on('input', function() {
// do your stuff
});
...这是漂亮和干净的,但可以进一步扩展到:
jQuery('#some_text_box').on('input propertychange paste', function() {
// do your stuff
});
其他回答
你考虑使用变化事件吗?
$("#myTextBox").change(function() { alert("content changed"); });
document.getElementById('txtrate' + rowCount).onchange = function () {
// your logic
};
这个工作得很好,但在点击时也会触发事件,这并不好。我的系统进入循环。 而
$('#txtrate'+rowCount).bind('input', function() {
//your logic
} );
在我的场景中非常适用。它只在值改变时起作用。 可以使用document代替$ sign。getElementById太
在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');
}
});
});
使用闭包来记住按键之前复选框中的文本是什么,并检查它是否已更改。
是的。不一定要使用闭包,但需要记住旧值并将其与新值进行比较。
然而!这仍然不会捕捉每一个变化,因为有一种编辑文本框内容的方法,不涉及任何按键。例如,选择一个文本范围,然后右键单击剪切。或者拖着它。或者从另一个应用程序中删除文本到文本框中。或者通过浏览器的拼写检查更改一个单词。还是……
因此,如果必须检测每个变化,就必须进行轮询。你可以打开窗户。setInterval每(比如说)秒检查字段是否与之前的值对应。您还可以将onkeyup连接到相同的函数,以便更快地反映由按键引起的更改。
麻烦吗?是的。但这就是正常的HTML onchange方式,不要尝试即时更新。
开始观察“输入”事件而不是“改变”事件。
jQuery('#some_text_box').on('input', function() {
// do your stuff
});
...这是漂亮和干净的,但可以进一步扩展到:
jQuery('#some_text_box').on('input propertychange paste', function() {
// do your stuff
});