我有一个带有onchange事件的文本框。为什么当用户使用自动填充功能填充文本框时,此事件不会触发?为什么javascript onchange事件在自动完成时不会触发?
我正在使用Internet Explorer。有没有一种标准的和相对简单的解决方案来解决这个问题,而不必禁用自动完成功能?
我有一个带有onchange事件的文本框。为什么当用户使用自动填充功能填充文本框时,此事件不会触发?为什么javascript onchange事件在自动完成时不会触发?
我正在使用Internet Explorer。有没有一种标准的和相对简单的解决方案来解决这个问题,而不必禁用自动完成功能?
上次我遇到这个问题时,我最终使用了Internet Explorer的onpropertychange
事件。我读了关于here on MSDN:这是推荐它的方法。
我以前遇到过这个令人讨厌的功能,当时我的解决方案是使用onfocus事件来记录文本框的当前值,然后使用onblur事件来检查当前值是否与值相匹配在聚焦期间保存。例如
<input type="text" name="txtTest" value="" onfocus="this.originalvalue=this.value" onblur="if (this.value != this.originalvalue) alert('Test has changed')"/>
这发生在我最新版本的Chrome中,很明显,它不是IE特定的东西。 'onblur`解决了我的问题。 – DanO 2011-09-20 00:01:04
我刚打开自动完成关闭的文本框,我需要触发一个文本改变事件
'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>
我刚刚发现using jQuery 1.4 to set change event可以解决这个问题。如果你已经熟悉jQuery,这个问题似乎是最简单的解决方案。
大厦蒂姆·C'S答案,这里是我想出了一个简单的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(V1.10 +)JavaScript并在文本是自动完成HTML文本输入字段的情况下工作。这是测试,以可靠地至少在Safari 6.1.1的工作在Mac OS X 10.8.5,但应在其他兼容的浏览器工作也:
$("input:text[id=text_field_id]").bind("focus change keyup blur", function(event) {
// handle text change here...
});
似乎添加blur
事件处理程序是关键尽管其他事件处理程序有助于确保在文本更改时随时调用事件处理程序,无论是由于浏览器自动完成功能的编辑还是新输入。
只需更换上面您想要的文字输入领域的相关选择的"input:text[id=text_field_id]"
代码,如果使用id
属性是指你的领域,更换text_field_id
与文本字段的id
属性值。
但它似乎每次用户按下一个键时会触发。我在这里做错了什么? – Preets 2008-12-05 09:32:10
不幸的是它是如何工作的。 但我只是发现这个资源,这似乎解决了一个很好的方式问题:http://jehiah.cz/archive/onchange-and-autocomplete – 2008-12-05 09:41:47
注意:onpropertychange不再似乎在IE9中可靠地工作,至少在我的测试中。 – 2011-11-23 21:46:39