JS中浏览器一些兼容的解决方法
- 在开发研发的过程中因为我们不知道用户是用什么版本的浏览器,所以经常会遇到浏览器兼容问题,对于不同的浏览器,一些js语法也不一样。今天我们就来总结一部分常见的浏览器兼容事件,希望对大家有所帮助
1,获取非行内样式的兼容
- IE浏览器:element.currentStyle[attr];
- 其他浏览器:getComputedStyle(element,false)[attr]
- 解决办法:
function getStyle(cssObj,attr){ if(cssObj.currentStyle){ return cssObj.currentStyle[attr];//针对ie浏览器获取非行间样式 }else{ return getComputedStyle(cssObj,false)[attr];//针对非ie浏览器获取非行间样式 }; }
2,事件对象的兼容问题
- IE浏览器: window.event
- 其他浏览器:对象.on事件 = function(event){}
- 解决办法:
function fn(eve){ var e = eve || window.event; }
3,事件冒泡的兼容问题
- IE浏览器: eve.cancelBubble = true;
- 其他浏览器:eve.stopPropagation();
- 解决办法:
function stopBubbles(e){ if(e.stopPropagation){ //针对非ie浏览器 e.stopPropagation(); }else{ //针对ie浏览器 e.cancelBubbles = true; } }
4,浏览器默认行为的兼容问题
- IE浏览器: window.event.returnValue = false;
- 其他浏览器:e.preventDefault();
- 解决办法:
if( e.preventDefault ){ //针对非ie浏览器 e.preventDefault(); }else{ //针对ie浏览器 window.event.returnValue = false; }
5,事件委托的兼容问题
- IE浏览器: e.srcElement;
- 其他浏览器: e.target;
- 解决办法:
dom.onclick = function(eve){ var e = eve || window.event; var target = e.target || e.srcElement; if(target.nodeName == "LI"){ console.log(target.innerHTML); } }
6,事件绑定方式的兼容问题
- 赋值式: (DOM 0级事件绑定)没兼容问题
- element["on"+type] = back;
- 监听式: (DOM 2级事件绑定)
- IE浏览器: element.attachEvent("on"+type,back)
- 其他浏览器 : element.addEventListener(type,back)
- 解决办法
function addEvent(ele,type,back){ if(ele.addEventListener){ //监听式:其他浏览器 ele.addEventListener(type,back) }else if(ele.attachEvent){ //监听式:IE浏览器 ele.attachEvent("on"+type,back) else{ //赋值式 ele["on"+type] = back; } }
7,删除事件绑定的兼容问题
- 赋值式: (DOM 0级事件绑定)没兼容问题
- element["on"+type] = null;
- 监听式: (DOM 2级事件绑定)
- IE浏览器: element.detachEvent("on"+type,back)
- 其他浏览器 : element.removeEventListener(type,back,false)
- 解决办法
function removeEvent(ele,type,back){ if(ele.removeEventListener){ //监听式:其他浏览器 ele.removeEventListener(type,back,false); }else if(ele.detachEvent){ //监听式:IE浏览器 ele.detachEvent("on" + type,back); }else{ //赋值式 ele["on"+type] = null; } }
8,键盘事件获取的兼容问题
- IE浏览器: event.which
- 其他浏览器 : event.keycode
- 解决方法
function code(eve){ var e=eve||window.event; var code=e.keyCode||e.which; }