javascript - 工作笔记 (事件绑定)
背景:
目前所做的项目,只能使用的是原生的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都支持这个
在使用中,经常会使用到绑定事件,为了兼顾一些浏览器的兼容性,在事件处理的时候,不得不多做些处理。
后来在网上看到了一位网友对于事件绑定的封装,感觉很不错,于是就借鉴来了,嘿嘿。
|
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 - 工作笔记 (事件绑定)的更多相关文章
- javascript - 工作笔记 (事件四)
在javascript - 工作笔记 (事件绑定二)篇中,我将事件的方法做了简单的包装, JavaScript Code 12345 yx.bind(item, "click&quo ...
- javascript - 工作笔记 (事件绑定二)
在上篇中的事件绑定方法,相信大家都看到过了. 不过这里有点小小的问题,这些方法,变量都是全局的,难免会与其他的库或者方法发生冲突而被覆盖,因此,我在这里做了小小的封装,如下: JavaScript ...
- JavaScript学习笔记——事件
javascript事件基础和事件绑定 一.事件驱动 1.事件 javascript侦测到的用户的操作或是页面的一些行为(怎么发生的) 2.事件源 引发事件的元素.(发生在谁的身上)3.事件处理程序 ...
- 理解Javascript中的事件绑定与事件委托
最近在深入实践js中,遇到了一些问题,比如我需要为动态创建的DOM元素绑定事件,那么普通的事件绑定就不行了,于是通过上网查资料了解到事件委托,因此想总结一下js中的事件绑定与事件委托. 事件绑定 ...
- 8. JavaScript学习笔记——事件
8. 事件 8.1 事件基础 /// 事件就是用户或浏览器自身执行的某种动作.诸如 click.load 和 mouseover,都是事件的名字.而响应某个事件的函数就叫做事件处理程序(或事件侦听器) ...
- JS学习笔记-事件绑定
一.传统事件模型 传统事件模型中存在局限性. 内联模型以HTML标签属性的形式使用,与HTML混写.这样的方式无疑造成了改动以及扩展的问题,已经非常少使用了. 脚本模型是将事件处理函数写到js文件里, ...
- javascript - 工作笔记 (事件三)
有关定义就不多说了,事件分两种 一,冒泡型事件 这是IE浏览器中事件模型的实现,顾名思义,就像水中的泡一样,自底而上,其经过的父元素都会触发对应的事件. 即:触发元素的父元素先于触发元素触发,看dem ...
- javascript closure 闭包 事件绑定
先来一个基本的例子 <!-- 实现一段脚本,使得点击对应链接alert出相应的编号 --> <meta http-equiv="Content-Type" con ...
- JavaScript 中 onload 事件绑定多个方法的优化建议
页面加载完毕时会触发 onload 事件.基于内容(HTML)要与行为(JavaScript)分离的编码思想,我们需要将一些对页面的初始化操作写在方法内,并通过window.onload = func ...
随机推荐
- CreateMutex() 、ReleaseMutex()
功能: CreateMutex() 用于有独占要求的程序 (在其进程运行期间不允许其他使用此端口设备的程序运行,或不允许同名程序运行). 比如运行金山词霸时,一次只能运行一个实例,当运行第二个实例时, ...
- 【转载】Java线程面试题 Top 50
Java线程面试题 Top 50 2014/08/21 | 分类: 基础技术 | 4 条评论 | 标签: 多线程, 面试题 分享到:140 本文由 ImportNew - 李 广 翻译自 javare ...
- XML_PULL解析
一.在Android应用中的XML文件来源 1.本地xml文件 本地XML文件可以放在应用根目录assets文件夹.res/xml.res/raw.SDcard卡.应用的data目录等: 除r ...
- switch函数——Gevent源码分析
在gevent的源码中,经常能看到switch函数.而不同的类中的switch函数有不同的用法 1. greenlet的switch函数 这里面的greenlet是greenlet库中的greenle ...
- python中实现多线程的几种方式
python实现多线程的方式大概有 1.threading 2._thread #!/usr/bin/python #!coding:utf-8 import threading def action ...
- MySQLdb-python的安装
第一步下载: 第一步:进入https://github.com/farcepest/MySQLdb1/ 第二步:解压 Shell>unzip /root/MySQLdb1-MySQLdb-1.3 ...
- Linux PCI网卡驱动的详细分析
学习应该是一个先把问题简单化,在把问题复杂化的过程.一开始就着手处理复杂的问题,难免让人有心惊胆颤,捉襟见肘的感觉.读Linux网卡驱动也是一 样.那长长的源码夹杂着那些我们陌生的变量和符号,望而生畏 ...
- jQuery验证控件(转载)
转自:http://www.cnblogs.com/hejunrex/archive/2011/11/17/2252193.html 官网地址:http://bassistance.de/jquery ...
- svn常见问题汇总
has no ancestry information 经查,由于project/,01Dev/的权限被关闭了,把当前文件夹父目录(project/,01Dev/) 下的 .svn/ 目录删除就好了.
- Hibernate 多表关联映射- Hibernate中使用的集合类型(set,list,array,bag,map)
Set类型的使用: <hibernate-mapping package="cn.model"> <class name="Department&quo ...