如果自动完成功能打开,为什么 javascript onchange 事件不会触发?

IT技术 asp.net javascript
2021-02-22 19:55:51

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

我正在使用 Internet Explorer。是否有标准且相对简单的解决方案来解决此问题,而无需禁用自动完成功能?

6个回答

上次我遇到这个问题时,我最终onpropertychange改为使用Internet Explorer事件。在 MSDN 上读到了这个:这是绕过它的推荐方法。

但似乎每次用户按下一个键时都会触发。我在这里做错了吗?
2021-04-21 19:55:51
不,不幸的是它是如何工作的。但我刚刚找到了这个资源,它似乎以一种很好的方式解决了这个问题:jehiah.cz/archive/onchange-and-autocomplete
2021-04-30 19:55:51
注意:onpropertychange 在 IE9 中似乎不再可靠地工作,至少在我的测试中是这样。
2021-04-30 19:55:51

之前遇到过这个烦人的功能,当时我的解决方法是使用onfocus事件记录文本框的当前值,然后使用onblur事件检查当前值是否与onfocus时保存的值相匹配。例如

<input type="text" name="txtTest" value="" onfocus="this.originalvalue=this.value" onblur="if (this.value != this.originalvalue) alert('Test has changed')"/>
这对我很有用 - 这是我的 jquerified 翻译: $("#my-field").focus(function(){this.originalvalue=this.value}).blur(function(){if (this.value != this.originalvalue) alert('changed')});
2021-04-22 19:55:51
这在最新版本的 Chrome 中发生在我身上,所以很明显它不是 IE 特定的东西。onblur固定我的问题。
2021-05-09 19:55:51
onblur 还解决了我的问题,并在 IE 7,8,9 和 9 comp 中工作。谢谢
2021-05-14 19:55:51

基于 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,这似乎是解决此问题的最简单方法。

我正在使用 jquery 1.7.1 并且使用 tab 键选择自动完成条目没有触发更改事件。我使用了 Tim C 的解决方案。
2021-05-12 19:55:51

我只是为需要触发文本更改事件的文本框关闭自动完成功能

'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>
这是一个解决方案,因为它关闭了一个不起作用的功能。我有一个实时验证每个字段的表单,当它们自动填充时,它们仍然显示错误。我宁愿不使用自动填充,然后使用损坏的表单。如果浏览器供应商在自动填充发生时引发一个事件,那就太好了。
2021-04-16 19:55:51
我喜欢它!迫使浏览器制造商对他们想要添加的这些功能提供更好的支持,以便我们可以使用它们……否则我们只是禁用它们!
2021-05-03 19:55:51
这不是真正的解决方案。自动完成对用户很有用。问题是如何使用它,而不是禁用它。
2021-05-14 19:55:51