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

我发现,文本框上的jQuery更改事件不会触发,直到我单击文本框之外。

HTML:

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

JS:

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

在JSFiddle上查看演示

我的应用程序需要在文本框中的每个字符更改时触发事件。 我什至尝试使用键盘,而不是…

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

…但是这是一个众所周知的事实,即在右键单击并粘贴的情况下,键盘事件不会被触发。

任何解决方法? 两个听众是否会造成任何问题?

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

你可以像这样绑定到多个事件:

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

如果你想琢磨一下,你还应该绑定到mouseup,以便拖拽文本,并添加一个lastValuevariables来确保文本实际上已经改变:

 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事件 :

DEMO

 $("#textbox").on('input',function() {alert("Change detected!");}); 
 if you write anything in your textbox, the event gets fired. code as follows : 

HTML:

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

JS:

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

这是用于打字,粘贴,鼠标右键粘贴等工作。

尝试这个:

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

在JSFiddle上查看演示 。

尝试下面的代码:

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

阅读你的意见,使我到一个肮脏的修复。 我知道这不是一个正确的方法,但可以是一个解决方法。

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