JS-DOM2级事件对象跨浏览器处理(已封装)

 1 var eventUill = {
 2     //添加事件
 3     addHander: function(element, type, handler) {
 4         if(element.addEventListener) {
 5             element.addEventListener(type, handler, false);
 6         } else if(element.attachEvent) {
 7             element.attachEvent(‘on‘ + type, handler);
 8         } else {
 9             element[‘on‘ + type] = handler;
10         }
11     },
12     //移除事件
13     removeHander: function(element, type, handler) {
14         if(element.removeEventListener) {
15             element.removeEventListener(type, handler, false);
16         } else if(element.detachEvent) {
17             element.detachEvent(‘on‘ + type, handler);
18         } else {
19             element[‘on‘ + type] = handler;
20         }
21     },
22     //获取到拥有这个事件的标签名称——事件对象(如input)
23     getEvent: function(event){
24         return event?event:window.event;//注意:返回后需要调用。可配合nodeName,来单独获取到标签的名字。
25     },
26     //获取事件的类型
27     getType: function(event){
28         return event.type;//注意:返回后需要调用。
29     },
30     //获取事件来自于哪个元素
31     getElement: function(event){
32         return event.target || event.srcElement;
33     },
34     //阻止、取消事件的默认行为/属性发生
35     preventDefault: function(event){
36         if(event.preventDefault){
37             event.preventDefault();
38         }else{
39             event.returnValue = null;
40         }
41     },
42     //阻止冒泡行为
43     stopPropagation: function(event){
44         if(event.stopPropagation){
45             event.stopPropagation();
46         }else{
47             event.cancelBubble = true;
48         }
49     }
50
51
52
53
54 }

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

时间: 2024-11-29 03:03:24

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

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

事件对象——兼容处理 1 /* 2 * 功能: 事件对象兼容 3 * 参数: 表示常规浏览器的事件对象e 4 */ 5 function getEvent(e) { 6 7 // 如果存在e存在,直接返回,否则返回window.event 8 return e || window.event; 9 } 获取事件所对应的目标——兼容处理 1 /* 2 3 * 功能: 获取事件所对应的目标 4 5 * 参数: 表示常规浏览器的事件对象e 6 7 */ 8 9 function getTargetBy

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

事件对象    在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事件有关的信息.包括导致事件的元素.事件的类型,以及其他与特定事件相关的信息.例如,鼠标操作导致的事件对象中,会包含鼠标位置的信息,而键盘操作导致的事件对象中,会包含与按下的键有关的信息.所有浏览器对象都支持event对象,但支持方式不同. DOM中的事件对象 兼容DOM的浏览器会将一个event对象传入到事件处理程序中.无论指定事件处理程序时使用什么方法(DOM0级或DOM2级),都会传入event

JS:Html事件处理程序 vs DOM0级事件处理程序 vs DOM2级事件处理程序

1.HTML事件处理程序 某个元素支持的某种事件,可以通过一个与相应事件处理程序同名的HTML特性指定.这个特性的值应该是能够执行的JS代码.例如:按钮单击是要执行一些js代码,可以像下面: <input type="button" value="click me" onclick="showMessage()" /> 在js中就可以像下面一样处理: <script> function showMessage(){ ale

js事件处理、事件对象

事件类型分类: 1 添加在html结构中的事件 <div id="div1" onclick="alert('append click event in html')"> </div> 点击div1之后弹出 append click event in html:其实在html结构中添加的事件也属于dom0级事件. 2 dom0级事件处理 <div id="div1"> </div> <scri

DOM0、DOM2级事件

JavaScript DOM0.DOM2级事件 1.DOM0级事件:on+事件类型 在html行内直接绑定,也就是通过行内js绑定的例如<span onclick="alert('1')">第一项</span> 在js中绑定例如://<span onclick="alert('2')">第一项</span> var Ospan=document.getElementsByTagName('span')[0];Ospan

Dom0级事件和Dom2级事件

1.Dom0级事件: 注册obj.onclick=function () {}; (1.使用简单,2.跨浏览器): 删除obj.onclick=null; 2.Dom2级事件(比0级优点:多个处理函数不会被覆盖): 成员 -> addEventListener注册事件   removeEventListener移出事件: 三个参数 -> 1事件名(都不能带on),2处理函数,3布尔值涉及嵌套元素的事件触发顺序(true按捕获流的顺序调用,false按事件冒泡流的顺序调用): (IE下用atta

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

DOM2级事件 事件的几种类型:对象事件,鼠标事件,键盘事件,表单事件,W3CDOM事件,以及针对浏览器的事件. 对象事件:window对象,也是javascript对象.load  适用于window对象,页面需要的所有图像文件都载入完成才触发.unload  适用于window对象,页面被关闭之前捕获最后一瞬间的信息.error  适用于window对象和图像对象.图像一旦设置src属性,就开始载入图像.abort  在图像完全载入之前,因浏览器停止载入页面导致图像载入失败时触发.通常发生在

DOM2级事件addEventListener

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" con

关于DOM2级事件的事件捕获和事件冒泡

DOM2级事件中addEventListener的执行机制,多个addEventListener同时添加时的执行先后规律: W3C的DOM事件触发分为三个阶段:①.事件捕获阶段,即由最顶层元素(一般是从window元素开始,有的浏览器是从document开始,至于其中的差别我稍后会更新)开始,逐次进入dom内部,最后到达目标元素,依次执行绑定在其上的事件②.处于目标阶段,检测机制到达目标元素,按事件注册顺序执行绑定在目标元素上的事件.③.事件冒泡阶段,从目标元素出发,向外层元素冒泡,最后到达顶层