一、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. Go and Beego Development

    1. Beego wiki in en and cn https://beego.me/ For API development: https://beego.me/blog/beego_api 2. ...

  2. python:dist-packages && site-packages

    先简单描述下问题.我用的ubuntu,源码编译安装的python3.我安装一些库,需要通过apt-get方式安装,这个时候就会遇到python找不到这些库的问题. 有个文章可以简单看看:http:// ...

  3. 分区恢复和NTFS文件恢复试验

    一.实验室名称:主楼实验室A2-412                  二.实验项目名称:分区恢复和NTFS文件恢复试验 三.实验学时:6学时 四.实验原理: 借助fdisk.diskgen软件对磁 ...

  4. Python divmod() 函数

    Python divmod() 函数  Python 内置函数 python divmod() 函数把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b). 在 pyt ...

  5. sqlserver 必须声明标量变量 "***"。

    发现在navicat premium上执行报这个异常,在sqlserver上不报,想到我之前的文章用存储过程时mysql里有个分割符,去掉“:”果然执行成功. DECLARE @countlmc IN ...

  6. Oracle ADF 创建序列

    双击VO,打开Attribute 标签页在弹出的窗口中选择Default Value Type 为“Expression”, value 的值为:(new oracle.jbo.server.Sequ ...

  7. Solidity根据精度来表示浮点数

    https://stackoverflow.com/questions/42738640/division-in-ethereum-solidity/42739843 pragma solidity ...

  8. vbs执行系统命令

    首先说明一下,我的所有代码都是vbscript,jscript我没有研究过,不过我想也差不多. 关于最基础的语法比如变量的申明,分支,循环,函数的调用,等等这些我就不讲了,不懂得自己看一下. 1.我们 ...

  9. 超赞!UX写手必备技能

    以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 今天,小编非常荣幸能与大家一起分享一些优秀UX 写手必备的成功技能: 1.开篇抓住用户的心 MBE曾 ...

  10. 04 Python入门学习-流程控制(if else elif while for)

    一:流程控制if 语法一: if 条件: code1 code2 code3 ... age = 20 height = 170 weight = 60 sex = 'female' is_beaut ...