我有一个带有onchange事件的文本框。当用户使用自动填充功能填充文本框时,为什么此事件不会触发?
我正在使用Internet Explorer。是否有一个标准且相对简单的解决方案来解决此问题,而我不必禁用自动完成功能?
答案 0 :(得分:17)
上次我遇到这个问题时,我最终使用了onpropertychange
事件来代替Internet Explorer。我读到了here on MSDN:这是推荐的解决方法。
答案 1 :(得分:12)
之前我遇到过这个恼人的功能,当时我的解决方案是使用onfocus事件来记录文本框的当前值,然后使用onblur事件检查当前值是否与保存的值匹配在onfocus期间。例如
<input type="text" name="txtTest" value="" onfocus="this.originalvalue=this.value" onblur="if (this.value != this.originalvalue) alert('Test has changed')"/>
答案 2 :(得分:6)
在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();
})
答案 3 :(得分:4)
我刚发现using jQuery 1.4 to set change event可以解决这个问题。如果您已熟悉jQuery,这似乎是解决此问题的最简单方法。
答案 4 :(得分:2)
我只需关闭自动完成功能就需要触发文本更改事件的文本框
'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>
答案 5 :(得分:1)
我发现以下jQuery(v1.10 +)JavaScript可以在HTML文本输入字段自动完成文本的情况下工作。经测试,至少在Mac OS X 10.8.5上的Safari 6.1.1中可以可靠地工作,但也可以在其他兼容的浏览器中使用:
$("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
替换为您的文字字段& #39; s id
属性值。