为什么在启用自动填充功能时,javascript onchange事件不会触发?

时间:2008-12-05 08:25:36

标签: asp.net javascript

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

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

6 个答案:

答案 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属性值。