zoukankan      html  css  js  c++  java
  • js的浏览器常见兼容问题汇总

    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;
    }
    
  • 相关阅读:
    对开发者有用的英文网站合集
    比较全的OA系统功能模块列表
    OA系统权限管理设计方案
    OA系统启动:基础数据,工作流设计
    JS生成UUID
    java类过滤器,防止页面SQL注入
    Restful安全认证及权限的解决方案
    把表单转成json,并且name为key,value为值
    JDBC上关于数据库中多表操作一对多关系和多对多关系的实现方法
    Jquery 获取第一个子元素
  • 原文地址:https://www.cnblogs.com/tongmeng/p/11780957.html
Copyright © 2011-2022 走看看