一、javascript事件处理中

addEventListener/removeEventListener 用于绑定事件和解除事件,但大多用于chrome/火狐/IE9这些比较高级的浏览器中,IE8及以下就没有效果。

主要用法:element.addEventListener(type,event,boolean); type:绑定的一些js事件如鼠标事件等;event:执行的动作我理解为一个函数;布尔值:我理解为事件开始执行的地方,默认值为false。

值得注意的是:removeEventListener 解绑一个事件,解除的是addEventListener所绑定的事件,也就是说这两个方法里面的参数要一致,就是event要是一样的函数,匿名函数容易出错可以先给函数赋值;

attachEvent/detachEvent也是用于绑定事件和解除事件,但是这两个只有在IE8及及以下的浏览器中才能使用。

主要用法:element.attachEvent(type,event,boolean); type:绑定的一些js事件如鼠标事件等要加“on”不知道为什么;event:执行的动作我理解为一个函数;

二、IE8始终还算是主流浏览器,要考虑到兼容,但不能每次都写两个代码,所以整合成一个封装起来以便使用

<button type="button" id="btntest">just a test</button>

<script type="text/javascript">
var EventUtil={
addhandler:function(element,type,events){
if(element.addEventListener){ //添加事件
element.addEventListener(type,events,false); //如果不是IE8及以下的浏览器则执行
}else if(element.attachEvent){
element.attachEvent("on"+type,events); //如果是IE8则执行
}else{
element["on"+type]=null;
}
},
removehandler:function(element,type,event){
if(element.removeEventListener){ //移除事件
element.removeEventListener(type,events,false);
}else if(element.attachEvent){
element.detachEvent("on"+type,events);
}else{
element["on"+type]=null;
}
}
};

var btn=document.getElementById('btntest'); //测试用例
var handler=function(){ //命名函数
alert("just differ browser test!");
};
EventUtil.addhandler(btn,"click",handler); //调用
</script>

三、javascript中event对象属性和方法

function(event){}  event我理解为一个事件参数,所以有事件的属性和方法

event.target/currentTarget     target:点击的目标;

IE8及以下使用:srcElement

currentTarget:事件绑定的目标;

event.preventDefault:阻止默认行为;IE8及以下使用:event.returnValue=false

event.stopPropagation :阻止事件的冒泡或者捕获;IE8及以下使用:event.canaelBubble=true

event.clientY、pageY、screenY

clientY:指浏览器顶部底边到鼠标的位置,不计算滚动轴的距离

pageY:指浏览器顶部底边到鼠标的位置,计算滚动轴的距离

screenY:计算机屏幕顶部到鼠标的位置

四、IE浏览器兼容性的写法

和上面的添加删除事件兼容性的写法是一样的,直接在里面添加一下函数,进行分钟以便调用

var EventUtil={
getTarget:function(event){ //获取事件点击的目标
return event.target || event.srcElement;
},
preventDefault:function(event){ //阻止浏览器的默认事件的执行
if(event.preventDefault){
event.preventDefault();
}else{
event.returnValue=false;
}
},
stopPropagation:function(event){ //阻止事件的冒泡
if(event.stopPropagation){
event.stopPropagation();
}else{
event.cancelBubble=true;
}
}
};

javascript IE事件处理及跨浏览器事件处理程序的更多相关文章

  1. 【前端】跨浏览器事件处理程序EventUtil.js个人注释及详解

    <javascript高级程序设计>跨浏览器事件处理程序EventUtil.js个人注释 EventUtil.js // 跨浏览器事件处理程序封装 var EventUtil = { // ...

  2. javascript跨浏览器事件对象类库

    一.前言 学习了javascript事件后,个人总结归纳了跨浏览器事件对象类库,方便以后使用,现分享给大家. 二.事件对象封装 将对浏览器事件对象的操作封装成eventObject.js方便调用 // ...

  3. JS事件流、DOM事件流、IE事件处理、跨浏览器事件处理、事件对象与类型

    事件的移除 removeEventListener() 第二个参数需要指定要移除的事件句柄,不能是匿名函数,因为无法识别 想要移除成功,那么三个参数必须跟addEventListener中的三个完全一 ...

  4. js跨浏览器事件对象、事件处理程序

    项目中有时候会不用jquery这么好用的框架,需要自己封装一些事件对象和事件处理程序,像封装AJAX那样:这里面考虑最多的还是浏览器的兼容问题,原生js封装如下:var EventUtil={ //节 ...

  5. 原生JS跨浏览器事件封装处理

    引子:用javascript给元素绑定事件,我们可以用addEventListener这个方法,然而这个方法有兼容问题,比如在IE浏览器上面就无效,在IE上面要用attachEvent这个方法 一.a ...

  6. JS原生事件处理(跨浏览器)

    一.关于获取事件对象 FF有点倔强,只支持arguments[0],不支持window.event.这次真的不怪IE,虽然把event作为window的属性不合规范,但大家都已经默许这个小问题存在了, ...

  7. DOM(十四):代理检测和事件处理(跨浏览器)

    一.检测 用于用户代理检测,检测范围包括浏览器引擎.平台.Windows.移动设备和游戏系统等 /* *用户代理检测脚本,检测范围包括浏览器引擎.平台.Windows.移动设备和游戏系统 */ var ...

  8. 【写一个自己的js库】 4.完善跨浏览器事件操作

    1.阻止冒泡. function stopPropagation(event){ event = event || getEvent(event); if(event.stopPropagation) ...

  9. JavaScript-跨浏览器事件处理程序(EventUtil)

    事件操作对象: var EventUtil= { //添加事件 addHandler: function (element, type, handler) { if (element.addEvent ...

随机推荐

  1. Borg Maze(BFS+MST)

    Borg Maze http://poj.org/problem?id=3026 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions ...

  2. MD5加密算法原理及其应用

    MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆:所以要解密MD5没有现成的算法,只能用穷举法,把可能出现的明文,用MD5算法散列之后 ...

  3. .NET基础 (08)字符串处理

    字符串处理1 System.String是值类型还是引用类型2 StringBuilder类型有何作用3 如何在String和Byte[]对象之间进行转换4 简述BASE64编码的作用以及C#中对其的 ...

  4. Knowing how all your components work together: distributed tracing with Zipkin

    转自: http://aredko.blogspot.com/2014/02/knowing-how-all-your-components-work.html In today's post we ...

  5. Hdu4280 Island Transport 2017-02-15 17:10 44人阅读 评论(0) 收藏

    Island Transport Problem Description In the vast waters far far away, there are many islands. People ...

  6. 企业搜索引擎开发之连接器connector(二十)

    连接器里面衔接数据源与数据推送对象的是QueryTraverser类对象,该类实现了Traverser接口 /** * Interface presented by a Traverser. Used ...

  7. Linux的进程/线程间通信方式总结

    Linux系统中的进程间通信方式主要以下几种: 同一主机上的进程通信方式 * UNIX进程间通信方式: 包括管道(PIPE), 有名管道(FIFO), 和信号(Signal) * System V进程 ...

  8. Tomcat 系统架构与设计模式2

    门面设计模式 门面设计模式在 Tomcat 中有多处使用,在 Request 和 Response 对象封装中.Standard Wrapper 到 ServletConfig 封装中.Applica ...

  9. JAVA常见面试题及解答

    JAVA相关基础知识1.面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时 ...

  10. 用TextWriterTraceListener实现log文件记录 (转载)

    log4net之类3方组件确实很方便,但是想写个小小的demo之类的程序,有点用不起啊. 微软自带的TraceListener要实现一个简易的日志帮助类还是很简单的,直接上代码,自己备用,也希望对同样 ...