您现在的位置:首页 >> 前端 >> 内容

利用事件绑定的多种形态来解决多种形态浏览器兼容性问题

时间:2017/10/25 10:06:58 点击:

  核心提示:第一个种形态:事件绑定的基本语法 与概念 :使用 对象.事件=函数 的形式绑定响应函数,它只能同时为一个元素的一个事件绑定一个响应函数,不能绑定多个,如果绑定多个,则后边面的会覆盖掉前面的那个代码示范...

第一个种形态:

事件绑定的基本语法 与概念 :使用 对象.事件=函数 的形式绑定响应函数,它只能同时为一个元素的一个事件绑定一个响应函数,不能绑定多个,如果绑定多个,则后边面的会覆盖掉前面的那个

代码示范区:

//为btn01绑定一个单击响应函数

/*btn01.onclick = function(){

alert(1);

};*/

//为btn01绑定第二个响应函数

/*btn01.onclick = function(){

alert(2);

};*/

第二种形态:addEventListener()

通过这个方法也可以为元素绑定响应函数

参数:

1.事件的字符串,不要on

2.回调函数,当事件触发时该函数会被调用

3.是否在捕获阶段触发事件,需要一个布尔值,一般都传false

使用addEventListener()可以同时为一个元素的相同事件同时绑定多个响应函数

这样当事件被触发时,响应函数将会按照函数的绑定顺序执行,,,,,但是IE8及以下的浏览器不支持这个方法

addEventListener()方法的的语法与执行代码示范区:

btn.addEventListener('click',function(){

alert(1);

},false);

btn.addEventListener('click',function(){

alert(2);

},false);

btn.addEventListener('click',function(){

alert(3);

},false);

在IE8及以下浏览器没有addEventListener()这个方法所有要使用attachEvent()这个方法

attachEvent这个方法的基本介绍:

参数:

1.事件的字符串,要on

2.回调函数

这个方法也可以同时为一个事件绑定多个处理函数,不同的是它后绑定先执行,执行顺序和addEventListener()相反

基本代码的微略示范:

btn01.attachEvent("onclick",function(){

alert(1);

});

btn01.attachEvent("onclick",function(){

alert(2);

});

btn01.attachEvent("onclick",function(){

alert(3);

});

现在在考虑addEventListener和attachEvent中的回调函数这的this区别:

/*btn01.addEventListener("click",function(){

alert(this);

},false);*/

/*btn01.attachEvent("onclick",function(){

alert(this); });*...////this指向window

解释this的指向

addEventListener()----this--->指向是绑定事件的对象

attachEvent()-----this------>指向window

解决了下关于这个两个方法的兼容性问题:(下面代码仅供参考:):

function bind(obj , eventStr , callback){

if(obj.addEventListener){

//大部分浏览器兼容的方式

obj.addEventListener(eventStr , callback , false);

}else{

/*

* this是谁由调用方式决定

* callback.call(obj)

*/

//IE8及以下

obj.attachEvent("on"+eventStr , function(){

//在匿名函数中调用回调函数

callback.call(obj);//这个把attachEvent本来的this指向window改为callback.call(obj);call中传入的对象

});

}

}

作者:网络 来源:海空的博客