JavaScript 事件兼容性问题通常包括以下几种情况:
- DOM 版本不兼容:不同版本的 DOM 可能存在不同的事件行为和属性。在不同的浏览器和操作系统上,这些行为和属性可能会有所不同。
- 事件处理程序不兼容:不同浏览器和操作系统上,事件处理程序可能会有所不同。例如,在 IE 浏览器上,某些事件的默认处理程序可能是不同的。
- 事件属性不兼容:不同浏览器和操作系统上,事件属性可能会有所不同。例如,在 IE 浏览器上,某些事件的属性可能是不同的。

解决 JavaScript 事件兼容性问题的方法有以下几种:
- 使用事件回调函数:通过使用事件回调函数,可以避免不同浏览器和操作系统上事件处理程序的差异。事件回调函数可以在事件触发时被调用,从而实现兼容性。
- 使用事件监听器:通过使用事件监听器,可以避免不同浏览器和操作系统上事件行为和属性的差异。事件监听器可以在事件触发时被监听,从而实现兼容性。
- 使用 polyfill:如果某些事件在不同浏览器和操作系统上的行为和属性存在差异,可以使用 polyfill 来实现兼容性。polyfill 是一段动态替代的代码,它会在需要的地方添加相应的功能,从而实现兼容性。
- 使用 polyfill 和 polyfill-ie8:如果无法使用 polyfill 或者 polyfill-ie8 仍然无法实现兼容性,可以尝试在使用 polyfill 或者 polyfill-ie8 的同时,添加一些额外的功能来实现兼容性。例如,可以使用 polyfill-ie8 来添加一些 IE8 特有的功能,从而实现兼容性。
其他
1.事件对象本身,标准浏览器是时间发生时自动给方法传一个实参,这个实参就是时间对象,IE是全局的window.event;(解决方法是:e=e||window.event)
2.事件源:e.target,IE下是e.srcElement;(解决办法是是 var target=e.target||e.srcElement;)
3.DOM二级事件绑定:ele.addEventListener,IE是ele.attachEvent;
解决办法是通过
if(ele.addEventListener){
}else if(ele.attachEvent){
}
这样的方法来解决绑定对应的移除方法是removeEventListener和IE的detachEvent;
4.第三点中的IE的attachEvent绑定的方法上,
第一点、this不是当前元素了,而是变成了window; 第二点,事件的执行顺序是混乱的;
在IE678中,如果绑定的方法少于9个,执行的顺序是相反的,如果多于9个,执行的是混乱的; 第三点,同一函数可以重复绑定在同一事件上;
需要解决一个函数不能重复绑定在同一个事件上,低版本IE没有遵循这个原则;要保证一个方法只能被绑定到某事件上一次;
5.阻止事件传播;e.stopPropagation,IE是e.cancelBubble=true这个属性;这个一般不做处理,用这个 属性,还可以做观察者模式的;
6.阻止默认行为:e.preventDefault()方法,IE是e.returnValue=false;
7.e.pageX,e.pageY;相对于文档的鼠标坐标IE不支持这两个属性;但都支持clentX,clentY,这个是相对于浏览器的鼠标坐标。可以通过scrollTop+clientY来实现;
e.pageX=(document.documentElement.scrollLeft||document.body.scrollLeft)+ e.clientX;
e.pageY=(document.documentElement.scrollTop||document.body.scrollTop)+ e.clientY;
#挑战30天在头条写日记#