函数绑定,事件绑定之bindEvent()与 unBindEvent()函数

前面我写过一个一个特殊的事件绑定程序(通用于各种浏览器)
不过,此函数只实现了事件的绑定,并保证按顺序执行这些绑定的函数。但是,不能实现元素的某个事件上删除一个函数。比如:element元素的click事件上有三个函数分别是a,b,c。现在要删除c这个函数的绑定,就无法实现了。所以特重新编写了两个函数:
bindEvent(element, eventName, func) —— 绑定func到element的eventName事件上(不重复绑定)
unBindEvent(element, eventName, func) —— 删除element上的eventName事件上的func函数。
下面是这两个函数的源码:
// ---------- 事件绑定与删除绑定 ---------- // function bindEvent(element, eventName, func) { var events = element['the'+eventName]; //用于保存某个事件序列 if(!events) { //如果不存在一个序列,则创建它,并加入HTML标记当中的onEvent = function(){}形式的绑定 events = element['the'+eventName] = []; if (element['on'+eventName]) { events.push(element['on'+eventName]); } } //检测是否为重复绑定 for(var i=0; i= events.length) { events.push(func); } // 重新定义这个事件的执行方式 element['on'+eventName] = function(event) { event = event || (function() { //修复IE的事件对象 var e = window.event; e.preventDefault = function() { e.returnValue = false; } e.stopPropagation = function() { e.cancelBubble = true; } //根据需要继续修复 return e; })(); //顺序执行这些函数 for(var i=0; i
该事件绑定函数具有如下特点:
1、在事件函数中,this指向的是当前元素
2、每个事件其实是一个有序列,按顺序执行这个序列。
3、正确的传递了event对象。对于event对象在W3C标准与IE中的不同之处可以做出修复,本例修复了事件冒泡与阻止默认行为。
4、本机测试通过IE、Firefox、Chrome、Opera、Safari(可以说通用主流浏览器)
5、支持删除事件绑定
当然,还得拿来做一个测试,下面是测试的代码:
无标题文档

    Hello,world!

    Hello,百度!

  • afasdfsa
  • sfk
  • sdklfajsfjk
  • end
  • of
  1. 附加的第一项
  2. 附加的第二项
  3. 附加的第三项


首先,点击红色的UL试试看 —— 将预期弹出:你好,我是HTMLUListElement元素,你点击了我!
好的,再点一下其中的百度链接 ——
预期弹出:你好,我是http://www.baidu.com/,你点击了我!
非预期弹出:你好,我是HTMLULlistElement元素,你点击了我?
为什么非预期弹出?——对,这就是事件的冒泡,当我们点击百度的链接后,该事件将产生冒泡,过程如: --
  • --

    最新评论

    发表评论