Javascript事件委托方法绑定详细解决方案
事件绑定,这里泡原理,从点击元素递归通信事件的父元素,这样做是为大量的处理单元的好处,每个元素不是结合的活动,只有在它们的父元素绑定一次,提高性能。另一个好处是,你可以处理DOM元素的动态,并直接绑定的方式是不。
我总是用jQuery的方法来做这样的事情。几天前,我看到了公司项目的源代码来实现这种方式。我们需要仔细研究并与你分享。
功能bindaction美元(DOM,事件监听器){
在这里# DOM绑定元素,如document.body
#事件绑定事件,如单击
#听众是一个事件对象被执行
$ AddEvent(DOM、事件、函数(e){)
#这里一个E事件
对SRC元#采集点击
Var e = e window.event ||,
SRC = e.target e.srcelement | |,
行动,
returnval;
#泡沫模拟的方式,第一src.parentnode src,然后,然后src.parentnode.parent.node
DOM元素等于# DOM元素绑定事件,阻止泡沫
当(SRC)!= DOM){
attr动作属性#周期获取DOM元素,
行动= src.getattribute('attr-action);
如果属性行为性质#现有DOM元素,和事件对象的属性值的函数,来执行这个功能
的#功能属性属性动作事件,当前的DOM元素,其价值是通过执行
如果(侦听器{动作}){
returnval =听众{action}({
钢骨混凝土,
E:E,
行动:行动
});
如果在函数返回FALSE以上#,阻止泡沫
如果(returnval = false){
打破;
}
}
父节点#检索DOM元素
SRC = src.parentnode;
}
});
};
函数AddEvent美元(obj,型,手柄){
如果(obj类型| | | |!!!手柄){
返回;
}
#事件绑定到多个对象,递归调用
如果(obj instanceof Array){
对于(var i = 0,L = obj.length;i < L;i++){
$ AddEvent(obj {我}、类型、处理);
}
返回;
}
#绑定多个事件,递归调用
如果(类型是数组){
对于(var i = 0,L = type.length;i < L;i++){
$ AddEvent(obj类型{我},处理);
}
返回;
}
#下这部分是用来记录当前页面绑定事件的数量、事件和相关信息
#和对象绑定事件ID
窗口。__allhandlers =窗口。__allhandlers | | { };
窗口。__hcounter =窗口。__hcounter | | 0;
功能sethandler(obj、类型、处理、包装){
obj。__hids = obj。__hids | | { };
VaR HID = H + + + __hcounter窗口;
__hids.push(HID)的信息;
窗口。__allhandlers {藏} = { {
类型:类型,
汉德勒:处理者,
包装:包装
}
}
#的应用里面是修改绑定事件执行的功能
在这#低版本的IE真正发挥作用
功能createdelegate(处理、上下文){
返回函数(){
返回handle.apply(语境参数);
};
}
#绑定事件,事件绑定信息记录
如果(窗口。addEventListener){
VaR的包装= createdelegate(手柄,obj);
SetHandler(obj、类型、处理、包装)
Obj.addEventListener(类型、包装、虚假);
}
如果(窗口。attachevent){
VaR的包装= createdelegate(手柄,obj);
SetHandler(obj、类型、处理、包装)
obj.attachevent(+型,包装);
}
{其他
obj { +型} =处理;
}
};
看一个例子:
当你点击前三名,类名会突然转向,和别人不触发事件。
#出去{宽度:500px;背景颜色:# CDE }
#内{背景颜色:# ABCDEF;保证金:0;padding: 0;宽度:400px;}
Ul{background-color: pink; margin: 0; padding: 0; width: 400px;}
李:398px {宽度;高度:20px;border: 1px solid黑;保证金:15px 0px;padding: 0px;};}
DIV #出来> div #内:
class=小冰期属性的行动=setwhat
class=小冰期属性的行动=setwhat
class=小冰期属性的行动=setwhat
类
类
类
Ul:
class=小冰期属性的行动=setwhat
class=小冰期属性的行动=setwhat
class=小冰期属性的行动=setwhat
类
类
类
侦听器= {
setwhat:功能(选择){
警报(选择。SRC方法);
返回false;
},
};
在window.onload =函数(){ $ bindaction(document.getelementbyid(out),{一},'mouseover,听众);}
结果如下:
再次查看事件绑定,与我们绑定的事件相一致:
以上是本文的全部内容,希望大家能喜欢。