JQuery 文本框更改事件不会触发,直到文本框失去焦点?

我发现文本框上的 jQuery 更改事件只有在单击文本框外部时才会触发。

HTML:

<input type="text" id="textbox" />

约翰逊:

$("#textbox").change(function() {alert("Change detected!");});

参见 JSFiddle 上的演示

我的应用程序要求在文本框中每次字符更改时触发该事件。我甚至试着用 keyup 代替..。

$("#textbox").keyup(function() {alert("Keyup detected!");});

... 但是众所周知的事实是,击键事件不会在右键点击和粘贴时触发。

有什么解决办法吗? 让两个听众都听会引起什么问题吗?

177346 次浏览

试试这个:

$("#textbox").bind('paste',function() {alert("Change detected!");});

参见 JSFiddle 上的演示

试试以下代码:

$("#textbox").on('change keypress paste', function() {
console.log("Handler for .keypress() called.");
});

绑定到两个事件是这样做的典型方法。您也可以绑定到粘贴事件。

您可以像下面这样绑定到多个事件:

$("#textbox").on('change keyup paste', function() {
console.log('I am pretty sure the text box changed');
});

如果你想显得迂腐一点,你还应该绑定到 mouseup 来满足拖拽文本的需要,并添加一个 lastValue变量来确保文本确实发生了变化:

var lastValue = '';
$("#textbox").on('change keyup paste mouseup', function() {
if ($(this).val() != lastValue) {
lastValue = $(this).val();
console.log('The text box really changed this time');
}
});

如果你想成为一个迂腐的 super duper,那么你应该使用一个间隔计时器来满足自动填充,插件等:

var lastValue = '';
setInterval(function() {
if ($("#textbox").val() != lastValue) {
lastValue = $("#textbox").val();
console.log('I am definitely sure the text box realy realy changed this time');
}
}, 500);

在现代浏览器中,你可以使用 input事件:

演示

$("#textbox").on('input',function() {alert("Change detected!");});
$(this).bind('input propertychange', function() {
//your code here
});

这是工程打字,粘贴,右键鼠标粘贴等。

if you write anything in your textbox, the event gets fired.
code as follows :

HTML:

<input type="text" id="textbox" />

约翰逊:

<script type="text/javascript">
$(function () {
$("#textbox").bind('input', function() {
alert("letter entered");
});
});
</script>

读了你的评论,我陷入了一个肮脏的困境。我知道这不是正确的方法,但可以解决。

$(function() {
$( "#inputFieldId" ).autocomplete({
source: function( event, ui ) {
alert("do your functions here");
return false;
}
});
});