IE678 支持propertychange事件,可以监听所有属性(包括自定义属性)的改变事件,包括手动修改输入框文本以及js修改输入框文本。
propertychange事件有个特点就是不支持冒泡,这样就不能实现事件的委托,而且jquery也没有解决这个BUG,所以下面的代码是有问题的:
$("#container").on("propertychange", "input", func);
因为IE9开始支持addEventListener,而且还兼容attachEvent,所以其实IE9也是支持propertychange事件的,只不过只能使用attachEvent来注册事件。
而jquery内部应该是使用addEventListener注册事件的,导致jquery的on()方法在IE9下面注册propertychange事件无效。
IE9+,其他现代浏览器支持input事件,用来监听输入框文本内容的改变,且不需要失去焦点就可以触发。
change事件则是需要失去焦点才会触发,所有浏览器都支持该事件。
其中input事件和change事件都不能监听js操作的修改。
对于IE9+和firefox以及Opera浏览器,支持DOMAttrModified事件,和propertychange事件很相似,监听属性的变化,但是不监听用户操作的修改。
参考:
propertychange event
IE9的一个BUG:propertychange和input事件在拖拽 / 剪切 / 删除时无法触发
IE神奇小bug一则