var eventUill = {
//添加事件
addHander: function(element, type, handler) {
if(element.addEventListener) {
element.addEventListener(type, handler, false);
} else if(element.attachEvent) {
element.attachEvent('on' + type, handler);
} else {
element['on' + type] = handler;
}
},
//移除事件
removeHander: 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] = handler;
}
},
//获取到拥有这个事件的标签名称——事件对象(如input)
getEvent: function(event){
return event?event:window.event;//注意:返回后需要调用。可配合nodeName,来单独获取到标签的名字。
},
//获取事件的类型
getType: function(event){
return event.type;//注意:返回后需要调用。
},
//获取事件来自于哪个元素
getElement: function(event){
return event.target || event.srcElement;
},
//阻止、取消事件的默认行为/属性发生
preventDefault: function(event){
if(event.preventDefault){
event.preventDefault();
}else{
event.returnValue = null;
}
},
//阻止冒泡行为
stopPropagation: function(event){
if(event.stopPropagation){
event.stopPropagation();
}else{
event.cancelBubble = true;
}
} }

DOM2级事件对象的跨浏览器处理——js源码

遇到的小bug总结:

  1.   封装的库根本找不到,颜色都是灰的,说明代码是错的,通过在js中添加了一个var eventUill = {},建立了一个对象,html这里调用对象的addHander,
  2.   eventUill找不到,发现,引用外部库的js代码写在来调用库中函数的下边,根据文档流的优先级,说明还没有调出eventUill之前就执行函数了所以出错。那就把调用的外部库写到最上面,让他优先调用。
  3.   addEventLister不对,把ele改成了element,是不是以后写,这里也必须写element呢?全部改成element后变绿了,代码正确。
  4.   说element为空。那么element接受传过来的参数是空的,但是html中的btn处是没有问题的,我getElementById的代码也没有错。看来是老毛病又犯了。js写在html上面,获取id为btn的按钮,根据文档流,他还没有读到input的时候就去获取,你让他去哪里获取。找不到btn,自然传过去的是undefined。紧接着element就成null了。解决就是加上window。onload=function(所有的js代码)调用id的代码写到html的下边。这也是js习惯上要放到body的后边的理由。

以下是测试时的html文件,DOM2级事件-跨浏览器处理.js就是上面的js源码。

<!DOCTYPE html>
<html> <head>
<meta charset="UTF-8">
<title>dom2级事件跨浏览器处理-封装库</title>
<script src="DOM2级事件-跨浏览器处理.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
window.onload = function() {
var btn = document.getElementById('btn');
eventUill.addHander(btn, 'click', function() {
alert('点击后通过封装的库辗转调用了这个匿名函数');
alert(eventUill.getEvent(btn).nodeName);
alert(eventUill.getElement(btn));
});
}
</script> </head> <body>
<input type="button" value="点击" id="btn" />
</body> </html>

html

JS-DOM2级事件对象跨浏览器处理(已封装)的更多相关文章

  1. js事件对象--DOM中的事件对象/IE中的事件对象/跨浏览器的事件对象

    事件对象    在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事件有关的信息.包括导致事件的元素.事件的类型,以及其他与特定事件相关的信息.例如,鼠标操作导致的事件对 ...

  2. DOM2级事件对象、添加事件、阻止默认事件、阻止冒泡事件、获取事件对象目标的兼容处理

    事件对象——兼容处理 /* * 功能: 事件对象兼容 * 参数: 表示常规浏览器的事件对象e */ function getEvent(e) { // 如果存在e存在,直接返回,否则返回window. ...

  3. JS事件委托(事件代理,dom2级事件)

    一.前言 说实话,真问我什么是事件委托,我肯定gg,还好查了一下,原来就是我之前练习过的DOM2级事件的应用. 二.什么是事件委托? 事件委托就是当事件触发时,把要做的事委托给父元素(或父元素的父元素 ...

  4. 关于DOM事件流、DOM0级事件与DOM2级事件

    一.DOM 事件模型 DOM 事件模型包括捕获和冒泡,捕获是从上往下到达目标元素,冒泡是从当前元素,也就是目标元素往上到 window 二.流 流的概念,在现今的 JavaScript 中随处可见.比 ...

  5. js笔记19 事件对象

    1.常用的事件 onmouseover  onmouseout  onmousedown  onmousemove  onmouseup   onclick  onchange  onfocus  o ...

  6. js事件处理、事件对象

    事件类型分类: 1 添加在html结构中的事件 <div id="div1" onclick="alert('append click event in html' ...

  7. 测试DOM0级事件和DOM2级事件的堆叠

    1. 问题 如果大家看过北风网CJ讲师的Javascript视频教程,就可以看到其封装了一个很强的事件添加和删除函数,如下所示 function addEvent(obj, evtype, fn) { ...

  8. 2015-03-12——简析DOM2级事件

    DOM2级事件 事件的几种类型:对象事件,鼠标事件,键盘事件,表单事件,W3CDOM事件,以及针对浏览器的事件. 对象事件:window对象,也是javascript对象.load  适用于windo ...

  9. DOM0、DOM2级事件

    JavaScript DOM0.DOM2级事件 1.DOM0级事件:on+事件类型 在html行内直接绑定,也就是通过行内js绑定的例如<span onclick="alert('1' ...

随机推荐

  1. Codeforces Round #370(div 2)

    A B C :=w= D:两个人得分互不影响很关键 一种是f[i][j]表示前i轮,分差为j的方案数 明显有f[i][j]=f[i-1][j-2k]+2*f[i-1][j-2k+1]+...+(2k+ ...

  2. JavaScript学习笔记-简单的欢迎cookie

    0<!DOCT0000YPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml&quo ...

  3. Jmeter测试工具使用

    启动Jmeter: 路径:\apache-jmeter-2.13\bin\jmeter.bat 一.测试Http请求: 建立过程: 1.  测试计划--添加---Threads--线程组 2.  线程 ...

  4. Android开发之Menu和actionBar

    一.通过Menu目录下创建一个布局文件: 先看代码meu/main.xml: <?xml version="1.0" encoding="utf-8"?& ...

  5. 15-grep 简明笔

    在文件中搜索模式 grep [options] pattern [file-list] 参数 pattern为正则表达式,file-list为grep要搜索的普通文本文件的路径名列表 选项 -c    ...

  6. python环境搭建-在Windows上安装python3.5.2

    在Windows上安装Python3.5.2 首先,根据你的Windows版本(64位还是32位)从Python的官方网站下载Python 3.5.2对应的64位安装程序或32位安装程序(网速慢的同学 ...

  7. 神经网络dropout

    训练集上面,加一个bool型的开关 做预测的时候,不需要打开开关,而是所有的数乘以p, 实际工业界做的时候是: 在训练的时候都除以p,在做预测的时候什么时候都不用干

  8. 网络流 poj 2135

    n个点 m条边 给m条边 求1->n n->1 最小花费,每条边最多走一次 两个最短路显然不行 会影响另外一条 #include<stdio.h> #include<al ...

  9. VS2015 安装mvc4安装包以及vs2010 sp1后导致Razor语法失效代码不高亮(能正常运行)/视图页面无法智能提示(.cshtml)解决办法

    VS2015默认asp.net mvc 版本为5.0以上,默认不支持创建5.0以下的版本.所以想要使用mvc 4.0只能单独安装.在网上搜了几篇教程后在微软官网下载了Visual Studio 201 ...

  10. Oracle数据库中调用Java类开发存储过程、函数的方法

    Oracle数据库中调用Java类开发存储过程.函数的方法 时间:2014年12月24日  浏览:5538次 oracle数据库的开发非常灵活,不仅支持最基本的SQL,而且还提供了独有的PL/SQL, ...