Javascript IE上的onchange事件和编程输入值更改冲突

Javascript IE上的onchange事件和编程输入值更改冲突,javascript,html,internet-explorer,Javascript,Html,Internet Explorer,我注意到,在不同版本的Internet Explorer中,当输入值被js函数更改时,onchange事件不会被捕获,这是其他浏览器(如Mozilla或Chrome)不会发生的行为 稍微调查一下,我发现当js更改值时,IE中的onchange的正确操作无法得到保证: 示例(IE测试): 函数onchangeRequest(){ log('onchange-fired'); } 函数更改值(输入){ input.value+=“你好” } focus loss不调用onchangeReq

我注意到,在不同版本的Internet Explorer中,当输入值被js函数更改时,
onchange
事件不会被捕获,这是其他浏览器(如Mozilla或Chrome)不会发生的行为

稍微调查一下,我发现当js更改值时,IE中的
onchange
的正确操作无法得到保证:

  • 示例(IE测试):

函数onchangeRequest(){
log('onchange-fired');
}
函数更改值(输入){
input.value+=“你好”
}
focus loss不调用onchangeRequest()
焦点丢失调用onchangeRequest()

我发现多年来,微软一直遵循一种策略,即在浏览器中不遵循W3C标准,但根据IE自己的规范,这种行为是正确的:

当选择对象的选定选项以编程方式更改时,onchange事件不会触发

参考:

解决此问题并使您的解决方案跨浏览器的一个可能的解决方法是:

  • onfocus
    :将输入值保存到
  • onblur
    :调用一个js函数,将旧值与当前值进行比较
在我的实际场景中,我需要在输入值更改时触发ajax操作,因此使用
onblur
事件而不比较更改将导致大量不必要的后端调用

以下是一个例子:

函数onchangeRequest(输入){
if(input.value!=input.oldValue){
log('value-changed:do-ajax-request');
}否则{
log('值未更改');
}
}
函数更改值(输入){
input.value+=“添加”
}