JS中出现的的兼容问题的总结

普及:浏览器的兼容性问题,往往是个别浏览器(没错,就是那个与众不同的浏览器)对于一些标准的定义不一致导致的。俗话说:没有IE就没有伤害。


内容都是自己总结的,不免会出现错误或者bug,欢迎更正和补充,本篇内容也会不断更新

1.关于获取行外样式 currentStyle 和 getComputedStyle 出现的兼容性问题

我们都知道js通过style不可以获取行外样式,当我们需要获取行外样式时:

我们一般通过这两个方法获取行外样式:

IE下: currentStyle

Chrome,FF下: getComputedStyle(oDiv,false)

function getStyle(ele,attr){ if(ele.currentStyle){ return ele.currentStyle[attr]; }else{ return getComputedStyle(ele,false)[attr]; } } 

2关于为一个元素绑定两个相同事件:attachEvent/attachEventLister 出现的兼容问题

事件绑定:(不兼容需要两个结合做兼容if..else..)
IE8以下用: attachEvent('事件名',fn);
FF,Chrome,IE9-10用: attachEventLister('事件名',fn,false); //这个事件名没有on
多事件绑定封装成一个兼容函数:

   function addEvent(ele,type,cb){ if(ele.addEventListener){ ele.addEventListener(type,cb) }else if(ele.attachEvent){ ele.attachEvent("on"+type,cb) }else{ ele["on"+type] = cb; } } 

3监听事件的删除 removeEventListener/detachEvent

 function removeEvent(ele,type,cb){ if(ele.removeEventListener){ ele.removeEventListener(type,cb) }else if(ele.detachEvent){ ele.detachEvent("on"+type,cb) }else{ ele["on"+type] = null; } } 

4关于使用 event对象,出现的兼容性问题

 ob.onclick=function(eve) { //事件对象的兼容写法 var e=eve || window.event; 

5取消默认事件

w3c的方法是e.preventDefault(),IE则是使用e.returnValue = false;**·

preventDefault它是事件对象(Event)的一个方法,作用是取消一个目标元素的默认行为。既然是说默认行为,当然是元素必须有默认行为才能被取消,如果元素本身就没有默认行为,调用当然就无效了。什么元素有默认行为呢?如链接<a>,提交按钮<input type=”submit”>等。当Event 对象的 cancelable为false时,表示没有默认行为,这时即使有默认行为,调用preventDefault也是不会起作用的。

   function stopDefault(e){ if(e.preventDefault){ e.preventDefault() }else{ e.returnValue = false; } } 

6取消冒泡事件

w3c的方法是e.stopPropagation(),IE则是使用e.cancelBubble = true**·

stopPropagation也是事件对象(Event)的一个方法,作用是阻止目标元素的冒泡事件,但是会不阻止默认行为。什么是冒泡事件?如在一个按钮是绑定一个”click”事件,那么”click”事件会依次在它的父级元素中被触发 。stopPropagation就是阻止目标元素的事件冒泡到父级元素

    function stopBubble(e){ if(e.stopPropagation){ e.stopPropagation(); }else{ e.cancelBubble = true; } } 

7事件源的兼容写法

在事件中,当前操作的那个元素就是事件源。比如网页元素中a标签和input都有onclick事件,当点击a发生onclick事件时,事件源就是a标签,当点击input发送onclic事件是,事件源就是input。

如何获取事件源?

IE下:window.event.srcElement

标准下:event.target

由此可见,我们是通过事件对象获取到的事件源

   ob.onclick=function(eve) { //事件源的兼容写法 var e=eve || window.event; var t=e.target || e.srcElement; 

8键盘事件的兼容写法

IE下:event.which

标准下:event.keyCode

   ob.onclick=function(eve) { //键盘事件的兼容 var e=eve || window.event; var keyC=eve.keyCode || eve.which; 

9 下面列数一些常见的keyCode值

event.keyCode 返回当前按键的ASCII码

    空格    32

    回车    13

    左      37

    上      38

    右      39

    下      40

ctrlKey 判断ctrl是否被按下,按下返回true

shiftKey 判断shift是否被按下,按下返回true

altKey 判断alt是否被按下,按下返回true



作者:the丶hao
链接:https://www.jianshu.com/p/d3973e8fdafa
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

猜你喜欢

转载自www.cnblogs.com/bsys/p/11789970.html