仿jQuery中undelegate()方法功能的函数
//跨浏览器事件绑定
function addEvent(obj,type,fn){
if(typeof obj.removeEventListener !='undefined'){ /////////////////////////w3c
//创建一个数组,保存事件
if(!obj.events) obj.events=[];
//创建数组,保存方法
if(!obj.events[type]) obj.events[type]=[];
//判断数组里是否有数据,有数据检查一下是否有相同的方法
if(obj.events[type].length>0){
if(addEvent.equal(obj.events[type],fn)) {
return false;
} else {
obj.events[type].push(fn);
}
} else {
obj.events[type].push(fn);
}
obj.addEventListener(type, fn, false);
} else { /////////////////////////////////////IE
//创建一个数组,保存事件
if(!obj.events) obj.events=[];
//创建数组,保存方法
if(!obj.events[type]) obj.events[type]=[];
//判断数组里是否有数据,有数据检查一下是否有相同的方法
if(obj.events[type].length>0){
if(addEvent.equal(obj.events[type],fn)) {
return false;
} else {
obj.events[type].push(fn);
}
} else {
obj.events[type].push(fn);
}
//执行事件处理函数
var _this=this;
obj['on'+type]=addEvent.exec;
} } //执行事件处理函数
addEvent.exec=function(event){
var e =event || window.event;
var es = this.events[e.type];
for(var i in es){
es[i].call(this);
}
} //同一个注册函数进行屏蔽
addEvent.equal=function(es,fn){
for(var i in es){
if(es[i]==fn){
return true;
}
} return false;
} //删除事件
function removeEvent(obj,type){ if(typeof obj.removeEventListener !='undefined'){ ///////////////////////////////////////w3c
if(type){ //删除指定事件
//判断删除的事件是否绑定
if(!obj.events[type]) return false;
for(var j=0;j<obj.events[type].length;j++){
obj.removeEventListener(type,obj.events[type][j], false);
}
} else { //清除元素所有事件
for(var eveName in obj.events){
for(var k=0;k<obj.events[eveName].length;k++){
obj.removeEventListener(eveName,obj.events[eveName][k], false);
}
}
}
} else { /////////////////////////////////////IE
if(type){ //删除指定事件
//判断删除的事件是否绑定
if(!obj.events[type]) return false;
for(var j=0;j<obj.events[type].length;j++){
delete obj.events[type][j];
}
} else { //清除元素所有事件
for(var eveName in obj.events){
for(var k=0;k<obj.events[eveName].length;k++){
delete obj.events[eveName][k];
}
}
}
} }
addEvent(btn,'click',function(){
alert('事件绑定');
});
//删除click事件
removeEvent(btn,'click');
//删除mouseover事件
removeEvent(btn,'mouseover');
//删除所有事件
removeEvent(btn);
没优化函数,函数中有许多重复代码,因为感觉我写函数的思考不是很好,但是又没别的好想法,没有优化了。
如果哪位大鸟有好的思路或想法,请留言,
仿jQuery中undelegate()方法功能的函数的更多相关文章
- jQuery中on()方法用法实例详解
这篇文章主要介绍了jQuery中on()方法用法,实例分析了on()方法的功能及各种常见的使用技巧,并对比分析了与bind(),live(),delegate()等方法的区别,需要的朋友可以参考下 本 ...
- jQuery中attr()方法用法实例
本文实例讲述了jQuery中attr()方法用法.分享给大家供大家参考.具体分析如下: 此方法设置或返回匹配元素的属性值. attr()方法根据参数的不同,功能也不同. 语法结构一: 获取第一个匹配元 ...
- jquery中Live方法不可用,Jquery中Live方法失效
jquery中Live方法不可用,Jquery中Live方法失效 >>>>>>>>>>>>>>>>> ...
- jQuery中on()方法用法实例
这篇文章主要介绍了jQuery中on()方法用法,实例分析了on()方法的功能.定义及在匹配元素上绑定一个或者多个事件处理函数的使用技巧,需要的朋友可以参考下 本文实例讲述了jQuery中on()方法 ...
- 锋利的jQuery读书笔记---jQuery中Ajax--load方法
第一个Ajax例子 <!DOCTYPE html> <html> <head lang="en"> <meta charset=" ...
- 关于Jquery中ajax方法data参数用法的总结
data 发送到服务器的数据.将自动转换为请求字符串格式.GET 请求中将附加在 URL 后.查看 processData 选项说明以禁止此自动转换.必须为 Key/Value 格式.如果为数组,jQ ...
- 解析jQuery中extend方法--源码解析以及递归的过程《二》
源码解析 在解析代码之前,首先要了解extend函数要解决什么问题,以及传入不同的参数,会达到怎样的效果.extend函数内部处理传入的不同参数,返回处理后的对象. extend函数用来扩展对象,增加 ...
- jQuery中animate()方法用法实例
本文实例讲述了jQuery中animate()方法用法.分享给大家供大家参考.具体分析如下: 此方法用于创建自定义动画,并且能够规定动画执行时长.擦除效果.动画完成后还可以地触发一个回调函数. ani ...
- jQuery中index()方法用法实例
本文实例讲述了jQuery中index()方法用法.分享给大家供大家参考.具体分析如下: 此方法可以搜索匹配元素,并返回元素的索引值.索引值是从0开始的. 语法结构一: 当此方法没有参数的时候,返回值 ...
随机推荐
- LRESULT与wParam和lParam的问题
在微软vc提供的头文件中有定义在winnt.h中typedef long LONG;在windef.h中typedef LONG LRESULT; 所以LRESULT就是long,也就是长整形之所以取 ...
- IE浏览器在虚拟机中无法正常显示字符
今天在win7虚拟机中安装IE10之后,打开任何页面都无法显示文字,自己找了一些资料也没有什么发现,虚拟机其他的程序都能很好的工作,只有IE10有问题,于是初步怀疑是IE10设置的问题.于是打开IE的 ...
- PB学习笔记(一)
前言:我绝对很痛恨PB.1.没人带2.自己摸索3.头发掉了4.老大不停的给任务5.这语言老的不行了6,代码可读性不是一般的差 我绝对很喜欢PB.1.自我学习成功后那种成就感2.老大也会帮给我看看,指点 ...
- sql with(lock) 与事务
sql select查询语句 表后面携带 with(nolock) 会获取到 在事务中已经执行 但还未完成提交的 记录 即使表被锁住也能查询到 当事务最终执行失败时 查询到的记录可能没有啦 不 ...
- HTML5中script的async属性异步加载JS
HTML5中script的async属性异步加载JS HTML4.01为script标签定义了5个属性: charset 可选.指定src引入代码的字符集,大多数浏览器忽略该值.defer 可 ...
- 转载:linux vi命令详解
转自:http://www.cnblogs.com/mahang/archive/2011/09/01/2161672.html 刚开始学着用linux,对vi命令不是很熟,在网上转接了一篇. vi编 ...
- Jquery基础:append、prepend、after、before、appendTo的区别
append() 是在被选元素的结束标签前面(即改被选元素的内部)插入指定内容. after() 是在被选元素的结束标签后面(即该被选元素的外部)插入指定的内容. appendTo() 仍然是在被选元 ...
- dmalloc 原文 翻译整理
http://blog.csdn.net/cardinal_508/article/details/5553387 L13 从快速入门开始(Quickstart) 这个库是一个文件中所有简化用法中最常 ...
- SCCM 2007 R2部署、操作详解系列之概念
站点类型 在安装站点时,您决定它将是主站点还是辅助站点.然后,在安装其他站点时,您可以选择将其安排到层次结构关系中,以便父站点管理子站点,中央站点收集所有站点信息,从而进行集中式管理.也可以根据业务和 ...
- Codeforces Round #146 (Div. 1) A. LCM Challenge 水题
A. LCM Challenge 题目连接: http://www.codeforces.com/contest/235/problem/A Description Some days ago, I ...