javascript 事件兼容

今天了解了js 的事件,以前写代码时并不会在意它的兼容问题,那么今天总结几个关于事件的兼容写法。

1、js中经常用的就是点击事件,它在chrome 、火狐以及IE浏览器下的兼容写法比较新奇,

document.onclik = function(e){

       var oEvent = e || event;     

注意,不要将var e=e||event; 写成 var e=event||e; ,这在FireFox下会提示错误,FireFox无法处理未声明未赋值的变量event

      alert('x:'+oEvent.clientX + 'y:'+oEvent.clientY)

}

上述方式就是解决了兼容问题, alert('x:'+e.clientX + 'y:'+e.clientY)    //兼容火狐

alert('x:'+event.clientX + 'y:'+event.clientY)      //兼容chrome

2、键盘按下事件,它的兼容写法:

document.onkeydown = function(e){

     if(e.keyCode){

        alert(e.keyCode)

    }else{

       alert(e.which)

     }

}

3、阻止事件的冒泡,我理解的就是父子级同时都绑定了点击事件,如果执行了其中一个事件,另外一个的事件也会被执行,而且是从内往外执行,也就是子级先执行然后父级也被执行,就造成了不必要的麻烦,所以我们需要做的就是阻止事件的冒泡。首先阻止事件的冒泡,暂时先写两个方式:

w3c 的方法是 e.stopPropagation(),

IE 则是使用 e.cancelBubble = true;

兼容写法:

var e = e || window.event;    //这里一定写成window.event,网上是说的是在IE(暂时仅限于8.0以下版本)下是行不通的,IE采用了一种非标准的方式,并不是将事件作为函数参数传入,而是将事件作为window对象的event属性:window.event、window.event.screenX...

if ( e && e.stopPropagation ){

     e.stopPropagation();

}else{

     e.cancelBubble = true;

}

4、取消默认 事件,兼容写法

e.preventDefault()       // 火狐

 e.returnValue = false

var e = e||window.event;

if(e && e.preventDefault){

     e.preventDefault();

}else{

     e.returnValue = false;

}


5、事件的委托,一般来说此类方法会涉及到循环,用了事件委托之后,杜绝循环,执行效率更高,而且新创建的元素也可以执行该事件。

事件的委托的兼容写法:

oUl.onmouseover = function(e){

//为了兼容IE

    var oEvent = e||window.event;

    var target = oEvent.target|| oEvent.srcElement;

    if(target.nodeName.toLowerCase() == 'li'){

        target.style.background = 'red';

   }

}


6、事件的捕获,将其进行封装:

function fun(ele,eve,handler,type){

     if(ele.attchEvent){

        ele.attachEvent("on"+eve,handler)

     }else{

        ele.addEventListener(eve,handler,type)

   }

}

ele:元素

eve:事件

handler:函数

type:值为false 或 true

你可能感兴趣的:(javascript 事件兼容)