在做一个及时校验文本框输入的程序时,发现IE9这个问题,GOOGLE一下,发现也有其他人碰到了。
通常,为了最及时的获取用户对于文本输入框内容的改变,非IE浏览器、IE9以上浏览器,可以使用input事件,这个事件是最理想的一个处理方式。
对于IE6/7/8这些旧IE浏览器,通过propertychange事件也能处理。
IE9同时支持propertychange和input,却同时存在BUG。
改变输入框内容的行为有多种,主要有:
1.键盘输入(可通过keyup事件处理,但有按键不一定有改变输入的行为)
2.鼠标拖拽(可通过dragend / drop事件处理)
3.剪切(可通过cut事件处理,剪切可以通过快捷键也可以通过浏览器菜单,所以keydown/keyup靠不住)
4.粘贴(可通过paste事件处理,粘贴可以通过快捷键也可以通过浏览器菜单,所以keydown/keyup靠不住)
5.删除(悲催,并没有一个delete事件,如果是按键来删除还好办,如果是通过上下文菜单来删除,IE9下,propertychange和input都不会触发)
IE9的问题在于:
1. 按键BackSpace / 按键Delete / 拖拽 / 剪切 / 删除,不会触发propertychange和input事件
2. addEventListener绑定的propertychange事件任何情况都不会触发,但attachEvent绑定的propertychange事件则在除问题1之外的情况下能够触发。
3. 基于问题2的原因,使用jQuery绑定的propertychange事件在IE9下永远不会触发,因为它是调用addEventListener来绑定的。
要完美的处理IE9的文本框输入内容改变事件,就只剩下很丑陋的定时处理了,每隔多少个毫秒检测一次。
通常,为了最及时的获取用户对于文本输入框内容的改变,非IE浏览器、IE9以上浏览器,可以使用input事件,这个事件是最理想的一个处理方式。
对于IE6/7/8这些旧IE浏览器,通过propertychange事件也能处理。
IE9同时支持propertychange和input,却同时存在BUG。
改变输入框内容的行为有多种,主要有:
1.键盘输入(可通过keyup事件处理,但有按键不一定有改变输入的行为)
2.鼠标拖拽(可通过dragend / drop事件处理)
3.剪切(可通过cut事件处理,剪切可以通过快捷键也可以通过浏览器菜单,所以keydown/keyup靠不住)
4.粘贴(可通过paste事件处理,粘贴可以通过快捷键也可以通过浏览器菜单,所以keydown/keyup靠不住)
5.删除(悲催,并没有一个delete事件,如果是按键来删除还好办,如果是通过上下文菜单来删除,IE9下,propertychange和input都不会触发)
IE9的问题在于:
1. 按键BackSpace / 按键Delete / 拖拽 / 剪切 / 删除,不会触发propertychange和input事件
2. addEventListener绑定的propertychange事件任何情况都不会触发,但attachEvent绑定的propertychange事件则在除问题1之外的情况下能够触发。
3. 基于问题2的原因,使用jQuery绑定的propertychange事件在IE9下永远不会触发,因为它是调用addEventListener来绑定的。
要完美的处理IE9的文本框输入内容改变事件,就只剩下很丑陋的定时处理了,每隔多少个毫秒检测一次。