美文网首页程序员
JS中出现的的兼容问题的总结(持续更新中)

JS中出现的的兼容问题的总结(持续更新中)

作者: the丶hao | 来源:发表于2019-08-29 11:52 被阅读0次

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


    ie.png

    内容都是自己总结的,不免会出现错误或者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

    相关文章

      网友评论

        本文标题:JS中出现的的兼容问题的总结(持续更新中)

        本文链接:https://www.haomeiwen.com/subject/gndbectx.html