Javascript IE上的onchange事件和编程输入值更改冲突
我注意到,在不同版本的Internet Explorer中,当输入值被js函数更改时,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
onchange
事件不会被捕获,这是其他浏览器(如Mozilla或Chrome)不会发生的行为
稍微调查一下,我发现当js更改值时,IE中的onchange
的正确操作无法得到保证:
- 示例(IE测试):
函数onchangeRequest(){
log('onchange-fired');
}
函数更改值(输入){
input.value+=“你好”
}
focus loss不调用onchangeRequest()
焦点丢失调用onchangeRequest()
我发现多年来,微软一直遵循一种策略,即在浏览器中不遵循W3C标准,但根据IE自己的规范,这种行为是正确的:
当选择对象的选定选项以编程方式更改时,onchange事件不会触发
参考:
解决此问题并使您的解决方案跨浏览器的一个可能的解决方法是:
:将输入值保存到onfocus
:调用一个js函数,将旧值与当前值进行比较李>onblur
onblur
事件而不比较更改将导致大量不必要的后端调用
以下是一个例子:
函数onchangeRequest(输入){
if(input.value!=input.oldValue){
log('value-changed:do-ajax-request');
}否则{
log('值未更改');
}
}
函数更改值(输入){
input.value+=“添加”
}