原生事件绑定(跨浏览器),dom0和dom2的区别?

1. DOM0级事件处理程序(属性绑定,兼容性好)

    通过javascript制定事件处理程序的传统方式,将一个函数赋值给一个事件处理程序属性。特点是简单,跨浏览器。
        var btn = document.getElementById("btn");
btn.onclick = function(){
alert('cliked');
}
    dom0级方法制定的事件处理程序被认为是元素的方法,因此这个时候事件处理程序是在元素的作用域中运行,this指向当前元素。

     btn.onclick = null;  //删除事件处理程序

    

2. DOM2级事件处理程序(函数绑定,兼容性不好)

 1. 非IE

            DOM2级规范以一种符合逻辑的方式来标准化DOM事件,IE9,Firefox,Opera,Safari,Chrome全部已经实现了"DOM2级事件"模块的核心部分。IE8是最后一个仍然使用其专有事件系统的主要浏览器。

addEventListener()
事件绑定
参数:
要绑定的事件名 
  作为事件处理的函数
布尔值:true在捕获阶段调用事件处理程序;false在冒泡阶段调用
removeEventListener()
事件删除
参数:
要删除的事件名
  作为事件处理的函数
布尔值:true在捕获阶段调用事件处理程序;false在冒泡阶段调用

  例如:
  //事件绑定
var btn = document.getElementById("btn");
btn.addEventListener("click",function(){
alert(this.id); //该函数在其依附的元素的作用域中运行。
},false);
//事件移除
var btn = document.getElementById("btn");
var handler = function(){
alert(this.id);
}
btn.addEventListener("click",handler,false);
btn.removeEventListener("click",handler,false);//移除

    可以添加多个事件处理程序,并且按照添加她们的顺序触发。移除事件传入的参数与添加处理程序时使用的参数相同,添加事件时如果使用匿名函数将无法删除
   
2. IE事件处理程序
    事件处理程序会在全局作用域中运行,因此this指向window对象。为一个对象添加两个相同的事件,事件处理程序的顺序是按照添加相反顺序进行处理
attachEvent() 
事件绑定
  参数:
  事件处理程序名称
事件处理函数
detachEvent()
事件移除
参数:
  事件处理程序名称
事件处理函数
事件处理程序都被添加到冒泡阶段

3. 跨浏览器的事件处理程序

var outer = document.getElementById("outer");
var center = document.getElementById("center");
var inner = document.getElementById("inner");

function handler(){
    alert(this.id);
}
		
//事件绑定  IE/firefox浏览器
eventUtil.bind(inner,"click",handler);

//事件解绑
eventUtil.unbind(inner,"click",handler);

var eventUtil = {
	/**
		@param src事件源,type事件类型,fn事件处理函数
	*/
	bind:function(src,type,fn){
		if(src.addEventListener){
			src.addEventListener(type,fn,false);
		}else if(src.attachEvent){
			src.attachEvent("on"+type,fn);
		}else{
			src["on"+type] = fn;
		}
	},
	unbind:function(src,type,fn){
		if(src.removeEventListener){
			src.removeEventListener(type,fn,false);
		}else if(src.detachEvent){
			src.detachEvent("on"+type,fn);
		}else {
			src["on"+type] = null;
		}
	}
};

4.区别:

如果定义了两个dom0级事件,dom0级事件会覆盖

dom2不会覆盖,会依次执行

dom0和dom2可以共存,不互相覆盖,但是dom0之间依然会覆盖





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值