为什么javascript onchange事件在自动完成时不会触发?

我有一个onchange事件的文本框。 为什么当用户使用自动填充function填充文本框时,此事件不会触发?

我正在使用Internet Explorer。 有没有一个标准和相对简单的解决scheme来解决这个问题,而不必禁用自动完成function?

上次我有这个问题,我最终使用Internet Explorer的onpropertychange事件。 我在MSDN上阅读了这个:这是推荐它的方法。

我以前遇到过这个烦人的function,我当时的解决scheme是使用onfocus事件来logging文本框的当前值,然后使用onblur事件检查当前值是否与onfocus中保存的值相匹配。 例如

 <input type="text" name="txtTest" value="" onfocus="this.originalvalue=this.value" onblur="if (this.value != this.originalvalue) alert('Test has changed')"/> 

基于Tim C的回答,下面是我想出的一个简单的jquery来处理页面上所有文本框的问题:

 $("input[type=text]").bind("focus change",function(){ this.previousvalue = this.value; }).blur(function(){ if (this.previousvalue != this.value){ $(this).change(); } }) 

如果你不关心onchange多次射击,你可以简化一下:

 $("input[type=text]").blur(function(){ $(this).change(); }) 

我只是发现, 使用jQuery 1.4来设置更改事件可以解决这个问题。 如果你已经熟悉jQuery,这个问题似乎是最简单的解决scheme。

我只是closures自动完成的文本框我需要启动文本更改事件

 'Turn off Auto complete '(it needs to fire the text change event) txtYourTextBox.Attributes.Add("AutoComplete", "off") 

只要把它放在页面加载中。

或者,您可以将该属性添加到input元素或整个form上的标记中:

 <input type=text autocomplete=off> 

要么

 <form autocomplete=off> 

我发现下面的jQuery(v1.10 +)JavaScript在HTML文本input字段的文本被自动完成的情况下工作。 至less在Mac OS X 10.8.5的Safari 6.1.1中testing过这个function是可靠的,但是也可以在其他兼容的浏览器上运行:

 $("input:text[id=text_field_id]").bind("focus change keyup blur", function(event) { // handle text change here... }); 

尽pipe其他事件处理程序可以帮助确保在文本发生更改时调用事件处理程序,无论是由于浏览器自动完成的编辑还是新的input, blur事件处理程序的添加似乎成为工作的关键特征。

只需将上面的"input:text[id=text_field_id]"代码replace为所需文本input字段的相关select器,或者如果使用id属性引用您的字段,则将text_field_idreplace为文本字段的id属性值。