背景:

  目前所做的项目,只能使用的是原生的javascript。对于javascript的事件绑定想必大家都懂得语法:

    1,在标签中使用属性调用方法:<div onclick="AAAA();"></div>

    2,在javascript中对标签对象绑定数据:

      <div id="test"></div>

      var item = document.getElementById("test");

      item.onclick = function(){};

        //方式一(不能绑定多个事件,如果有多个,后面会覆盖前面)

        //无兼容性问题

      item.attachEvent("onclick", function(){});

        //附加事件,不会覆盖,触发时依次执行,IE特有

      item.addEventListener();

        //同上,IE9,Firefox,Safari,Chrome和Opera都支持这个

  在使用中,经常会使用到绑定事件,为了兼顾一些浏览器的兼容性,在事件处理的时候,不得不多做些处理。

  后来在网上看到了一位网友对于事件绑定的封装,感觉很不错,于是就借鉴来了,嘿嘿。

 JavaScript Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 
function addEvent(elementment, type, handler) {
    if(!handler.$$guid) handler.$$guid = addEvent.guid++;// 为每个事件处理函数赋予一个独立的ID
    if(!elementment.events) elementment.events = {};// 为元素建立一个事件类型的散列表
    var handlers = elementment.events[type];// 为每对元素/事件建立一个事件处理函数的散列表
    if(!handlers) {
        handlers = elementment.events[type] = {};
        if(elementment["on" + type]) {// 存储已有的事件处理函数(如果已存在一个)
] = elementment["on" + type];
        }
    }
    handlers[handler.$$guid] = handler;// 在散列表中存储该事件函数
    elementment["on" + type] = handleEvent;// 赋予一个全局事件处理函数来出来所有工作
}
addEvent.guid = ;// 创建独立ID的计数器
function removeEvent(elementment, type, handler) {
    if(elementment.events && elementment.events[type]) {// 从散列表中删除事件处理函数
        delete elementment.events[type][handler.$$guid];
    }
}
function handleEvent(event) {
    var returnValue = true;
    event = event || fixEvent(window.event);// 获取事件对象(IE使用全局的事件对象)
    var handlers = this.events[event.type];// 获取事件处理函数散列表的引用
    for(var i in handlers) {// 依次执行每个事件处理函数
        this.$$handerEvent = handlers[i];
        if(this.$$handerEvent(event) === false) {
            returnValue = false;
        }
    }
    return returnValue;
}
// 增加一些IE事件对象缺乏的方法
function fixEvent(event) {
    event.preventDefault = fixEvent.preventDefault;
    event.stopPropagation = fixEvent.stopPropagation;
    return event;
}
fixEvent.preventDefault = function() {
    this.returnValue = false;
}
fixEvent.stopPropagation = function() {
    this.cancelBubble = true;
}

javascript - 工作笔记 (事件绑定)的更多相关文章

  1. javascript - 工作笔记 (事件四)

    在javascript - 工作笔记 (事件绑定二)篇中,我将事件的方法做了简单的包装,  JavaScript Code  12345   yx.bind(item, "click&quo ...

  2. javascript - 工作笔记 (事件绑定二)

    在上篇中的事件绑定方法,相信大家都看到过了. 不过这里有点小小的问题,这些方法,变量都是全局的,难免会与其他的库或者方法发生冲突而被覆盖,因此,我在这里做了小小的封装,如下:  JavaScript ...

  3. JavaScript学习笔记——事件

    javascript事件基础和事件绑定 一.事件驱动 1.事件 javascript侦测到的用户的操作或是页面的一些行为(怎么发生的) 2.事件源 引发事件的元素.(发生在谁的身上)3.事件处理程序 ...

  4. 理解Javascript中的事件绑定与事件委托

    最近在深入实践js中,遇到了一些问题,比如我需要为动态创建的DOM元素绑定事件,那么普通的事件绑定就不行了,于是通过上网查资料了解到事件委托,因此想总结一下js中的事件绑定与事件委托. 事件绑定   ...

  5. 8. JavaScript学习笔记——事件

    8. 事件 8.1 事件基础 /// 事件就是用户或浏览器自身执行的某种动作.诸如 click.load 和 mouseover,都是事件的名字.而响应某个事件的函数就叫做事件处理程序(或事件侦听器) ...

  6. JS学习笔记-事件绑定

    一.传统事件模型 传统事件模型中存在局限性. 内联模型以HTML标签属性的形式使用,与HTML混写.这样的方式无疑造成了改动以及扩展的问题,已经非常少使用了. 脚本模型是将事件处理函数写到js文件里, ...

  7. javascript - 工作笔记 (事件三)

    有关定义就不多说了,事件分两种 一,冒泡型事件 这是IE浏览器中事件模型的实现,顾名思义,就像水中的泡一样,自底而上,其经过的父元素都会触发对应的事件. 即:触发元素的父元素先于触发元素触发,看dem ...

  8. javascript closure 闭包 事件绑定

    先来一个基本的例子 <!-- 实现一段脚本,使得点击对应链接alert出相应的编号 --> <meta http-equiv="Content-Type" con ...

  9. JavaScript 中 onload 事件绑定多个方法的优化建议

    页面加载完毕时会触发 onload 事件.基于内容(HTML)要与行为(JavaScript)分离的编码思想,我们需要将一些对页面的初始化操作写在方法内,并通过window.onload = func ...

随机推荐

  1. zookeeper_00:zookeeper注意事项

    需要将应用数据和协同数据独立开. 比如:网络邮箱服务的用户对自己邮箱中的内容感兴趣,但是并不关心由哪台服务器来处理特定邮箱的请求.在这个例子中,邮箱内容就是应用数据,而从邮箱到某一台邮箱服务器之间的映 ...

  2. MySql 环境配置

    关键词 MySQL 5.6.17  phpmyadmin   [下载MySQL]  MySQL Community Server MySQL社区版免费 注:需要oracle账户登录下载 [安装MySQ ...

  3. (转)解决JSP路径问题的方法(jsp文件开头path, basePath作用)

    在JSP中的如果使用 "相对路径"  则有可能会出现问题. 因为 网页中的 "相对路径" , 他是相对于 "URL请求的地址" 去寻找资源. ...

  4. div中嵌套div速度将会同样很慢

    ---恢复内容开始--- div中嵌套了div速度将会同样很慢   最近很多老板在我们公司做企业站的时候都会要求说:我要div+css的,不要表格建的那种,那样不利于优化.但我们发现就算给他们用div ...

  5. html中的圆角边框

    border-radius:20px; radius:以某某为半径画圆. 如何制作一个圆形: div{height:150px;//像素的一半,再加上边框的像素 width:150px; border ...

  6. u Calculate e

    问题陈述: 杭州电子科技大学 HANGZHOU DIANZI UNIVERSITY Online Judge Problem - 1012 问题解析: 简单题,注意输出格式.引入<iomaini ...

  7. LSD-FET430UIF与MSP-FET430UIF

    成功的破解了没人研究的东西很有成就感!世界需要这样的人!!!LSD-FET430UIF与MSP-FET430UIF?什么是MSPF149?网上查了很多这方面的资料,都没有,最后凭借我阅读PDF的精神和 ...

  8. php set env

    SYSTEM WARNING: 'date_default_timezone_get(): It is not safe to rely on the system's timezone settin ...

  9. AndroidUI 布局动画-布局内容改变动画

    实现一个点击菜单动画添加按钮,点击按钮移除当前按钮的动画效果: <LinearLayout xmlns:android="http://schemas.android.com/apk/ ...

  10. Linux学习之十二、命令别名与历史命令

    命令别名配置: alias, unalias 那么需要下达『 ls -al | more 』这个命令,我是觉得很烦啦! 要输入好几个单字!那可不可以使用 lm 来简化呢?当然可以,你可以在命令行下面下 ...