JS通用事件监听函数

版本一

//把它全部封装到一个对象中
var obj={
readyEvent:function (fn){
if(fn==null){
fn=document;
}
var oldOnload=window.onload;
if(typeof window.onload !='function'){
window.onload=fn;
}else{
window.onload=function (){
oldOnload();
fn();
}
}
},//添加事假
addEvent:function (element,type,handler){
if(element.addEventListener){
//事件类型 需要执行的函数 是否捕捉
element.addEventListener(type,handler,false)
}else if(element.attachEvent){
element.attachEvent('on'+type,function (){
handler.call(element);
});
}else{
element['on'+type]=handler;
}
},//移除事件
removeEvent:function (element,type,handler){
if(element.removeEventListener){
element.removeEventListener(type,handler,false)
}else if(element.detachEvent){
element.detachEvent('on'+type,handler)
}else{
element['on'+type]=null;
}
},//阻止事件冒泡
stopPropagation:function (ev){
if(ev.stopPropagation){
ev.stopPropagation();
}else{
ev.canceBubble=true;
}
},//取消事件的默认行为
preventDefault:function (ev){
if(event.preventDefault){
event.preventDefault();
}else{
event.returnValue=false;
}
},//获取事件目标
getTarget:function (event){
return event.target || event.srcElement;
},//获取event对象的引用,取到event对象的引用;取得事件的所有信息;确保随时能用到event;
getEvent:function (e){
var ev=e||window.event;
if(!ev){
var c=this.getEvent.caller;
while(c){
ev=c.arguments[0];
if(ev && Event==ev.constructor){
break;
}
c=c.caller;
}
}
return ev;
}
}

这里补充一点关于事件:srcElement 和 target(都指的是事件源)

srcElement是IE下的属性
 target是Firefox下的属性
 Chrome浏览器同时有这两个属性

实例一:

html

<input id="btnInfo" type="button" value="show" name="btn" />

<div id="infoq" style=" height:100px; width:100px; background:green;"></div>

js

window.onload=function (){

     var obj=document.getElementById("btnInfo");
obj.onclick=function (ev){
var e=ev || event;
var target=e.srcElement || e.target; //这样就获取到饿了我们的事件源滴呀
alert(target.value)
} //我们也可以直接的添加这个事件的属性滴呀
var div=document.getElementById("infoq");
div.onclick=function (ev){
var e=ev || event;
var target=e.srcElement || e.target; //这样就获取到饿了我们的事件源滴呀
alert(target.style.width)
}
}

我们再来看一个实例

html

<input type="text" onblur="alert(this.value)" />

<input type="text" onblur="alertValue()" />

<input type="text" onblur="alertValue1(this)" />

js

function alertValue(){
alert(this.value); //这样是不行的
}
function alertValue1(oThis){
alert(oThis.value);
}

版本二

var EventUtil={
addHandler:function (element,type,handler){
if(element.addEventListener){
element.addEventListener(type,handler,false);
}else{
element.attachEvent('on'+type,hanlder);
}
},
removeHandler:function (element,type,handler){
if (element.removeEventListener){
element.removeEventListener(type,hanlder,false);
}else if(element.detachEvent){
element.detachEvent('on'+type,handler);
}else{
element['on'+type]=null;
}
},
getEvent:function (event){
return event?event:window.event;
},
getTarget:function(event){
return event.target || event.srcElement;
},
preventDefault:function (event){
if(event.preventDefault){
event.preventDefault();
}else{
event.returnVauel=false;
}
},
stopPropagation:function (event){
if (event.stopPropagation){
event.stopPropagation();
}else{
event.cancleBubble=true;
}
} }

这里补充一篇关于事件的详细解读:http://www.admin10000.com/document/6293.html

这里,我们再补充一个高级一点js版本

 html

<style type="text/css">
.outer{
height:100px;
width:100px;
background:green;
}
</style>
</head> <body>
<div id="outer" class="outer">
</div>
</body>

javaScript

   //这个就是他的基本使用
var $=function (d){
typeof d=='string' && (d=document.getElementById(d))
return $.fn.call(d); //这个就是基本的写法
}
$.fn=function (){
this.addEvent=function (eventType,handler){
if(this.addEventListener){this.addEventListener(eventType,handler,false)}
else if(this.attachEvent){this.attachEvent('on'+eventType,handler)}
else {this['on'+eventType]=handler}
}
this.removeEvent=function (eventType,handler){
if(this.removeEventListener){this.removeEventListener(eventType,handler,false)}
else if(this.detachEvent){this.detachEvent('on'+eventType,handler)}
else{this['on'+eventType]==null}
}
return this;
}
//这样就添加了我们的事件监听的函数的呀
var Bind=function (obj,fun,arr){
return function (){
return fun.apply(obj,arr);//这样做是为了方面传递参数滴呀
}
} //测试
var obj=$('outer');
obj.setAttribute('at','fuck');
//要不然,被绑定的事件,无法获取该对象的属性的啊
//这样就能够获取到我们对象的值滴呀
//同样能够获取到我们传递的参数体呀
obj.addEvent('mouseover',Bind(obj,function (para){
var s=arguments;
console.log(para);
console.log(this.getAttribute('at'))
},['mouseover']) //这样我们的参数才算是完毕了滴呀
);
//这样我们的额参数就传递进去了滴一
obj.addEvent('mouseout',Bind(obj, function (para){
console.log(para);
console.log(this.getAttribute('at'))
},['mouseout'])
);

JS通用事件监听函数的更多相关文章

  1. js添加事件监听的方式与this

    js添加事件监听与this js添加事件监听的方式与this 在标签中调用自定义函数 DOM0级事件处理程序 DOM2级事件处理程序 this 代表谁? js添加事件监听的方式与this <di ...

  2. JS的事件监听机制

    很久以前有个叫Netscape的姑娘,她制订了Javascript的一套事件驱动机制(即事件捕获) 后来又有一个叫“IE”的小子,这孩子比较傲气,他认为“凭什么我要依照你的规则走”,于是他又创造了一套 ...

  3. js实现事件监听与阻止监听传播

    监听事件: 使用attachEvent(用于IE)和addEventListener(用于谷歌.火狐)时则可以实现多个事件处理函数的调用 1.下面都是dom对象的方法,可以实现一种事件绑定多个事件处理 ...

  4. JS之事件监听

    一 如果事件监听类似于如下写法,则最终只会执行最后一个事件监听,其他监听都会被覆盖掉. window.onload=funtion(){console.log(1);}; window.onload= ...

  5. Node.js之事件监听和发送

    演示事件的发送和监听 const events = require("events"); function Account() { this.balance = 0; events ...

  6. JavaScript中绑定事件监听函数的通用方法addEvent() 和 事件绑定之bindEvent()与 unBindEvent()函数

    下面绑定事件的代码,进行了兼容性处理,能够被所有浏览器支持: function addEvent(obj,type,handle){ try{ // Chrome.FireFox.Opera.Safa ...

  7. JS键盘事件监听

    window.onload=function(){ var keyword = document.getElementById("keyword"); keyword.onkeyu ...

  8. js事件监听-addEventListener (w3c标准) 和 attachEvent(ie)

    研究了一个小时,没看懂这两个属性 window.onload = function(){ var oDiv = document.getElementById("J_myDiv") ...

  9. React.js 小书 Lesson9 - 事件监听

    作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson9 转载请注明出处,保留原文链接和作者信息. 在 React.js 里面监听事件是很容易的事情 ...

随机推荐

  1. Redis内存存储结构分析

    1 Redis 内存存储结构 本文是基于 Redis-v2.2.4 版本进行分析. 1.1 Redis 内存存储总体结构 Redis 是支持多key-value数据库(表)的,并用 RedisDb 来 ...

  2. meta标签的用法

    meta是用来在HTML文档中模拟HTTP协议的响应头报文.meta 标签用于网页的<head>与</head>中,meta 标签的用处很多.meta 的属性有两种:name和 ...

  3. checking在浏览器为应用缓存查找更新时触发

    离线的Web应用,就是在设备不能上网的时候还能运行应用.html5把离线应用作为重点,主要是开发人员的心愿.离线应用的开发的步骤有:首先应该知道设备是否能够上网;然后应该还能访问一定的资源(如图像.C ...

  4. java抛出异常是怎么回事?

    一.Java异常的基础知识 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的.比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error:如 ...

  5. 投芯片,现在要n+1模式

    给坚持理想的屌丝点个赞.投芯片,现在要n+1模式,n个小项目+一个大项目.团队是基础,屌丝创业要以营利为先导,先要短快,同时要有并行的大项目支撑.小项目赚的钱先解决面包问题,同时为大项目锻炼队伍积累经 ...

  6. WampServer 在 httpd.conf 中配置多站点 (IP 配置法:不用每次修改 hosts 文件 + 域名配置法 )

    因为要用 ThinkPHP 的当前最新版本 3.2.2,对应要求 PHP 的版本要高于 5.3.0,所以安装了 WampServer 2.2 ( Apache 2.2.21,PHP 5.3.10,My ...

  7. oracle 多表查询

    1.注意点 在查询过程中,不确定数据库表中的数据量,先查询数据量,数据量较大,则不能直接查询(select * from emp),如果数据量较大,直接查询容易造成死机或者数据读取较慢,如果较小可以查 ...

  8. 如何删除docker images/containers

    docker images往往不知不觉就占满了硬盘空间,为了清理冗余的image,可采用以下方法: 1.进入root权限 sudo su 2.停止所有的container,这样才能够删除其中的imag ...

  9. word size

    Computer Systems A Programmer's Perspective Second Edition Running throughout the system is a collec ...

  10. Android UI开发: 横向ListView(HorizontalListView)及一个简单相册的完整实现 (附源码下载)

    http://blog.csdn.net/yanzi1225627/article/details/21294553 原文