- 浏览: 1645073 次
- 性别:
文章分类
- 全部博客 (2929)
- 非技术 (18)
- Eclipse (11)
- JAVA (31)
- 正则表达式 (0)
- J2EE (4)
- DOS命令 (2)
- WEB前端 (52)
- JavaScript (69)
- 数据库 (8)
- 设计模式 (0)
- JFreechart (1)
- 操作系统 (1)
- 互联网 (10)
- EasyMock (1)
- jQuery (5)
- Struts2 (12)
- Spring (24)
- 浏览器 (16)
- OGNL (1)
- WebService (12)
- OSGi (14)
- 软件 (10)
- Tomcat (2)
- Ext (3)
- SiteMesh (2)
- 开源软件 (2)
- Hibernate (2)
- Quartz (6)
- iBatis (2)
最新评论
1, 下面是JQuery之父推荐的添加移除事件方法。
- /*
- *obj要绑定事件的对象
- *type事件类型,指"click","load","submit","mouseover"等
- *fn函数名
- */
- functionaddEvent(obj,type,fn)
- {
- if (obj.attachEvent)
- {
- obj[ 'e' +type+fn]=fn;
- obj[type+fn]=function()
- {
- obj[ 'e' +type+fn](window.event);
- }
- obj.attachEvent( 'on' +type,obj[type+fn]);
- }
- else
- obj.addEventListener(type,fn, false );
- }
- /*
- *obj要删除事件的对象
- *type事件类型,指"click","load","submit","mouseover"等
- *fn函数名
- */
- functionremoveEvent(obj,type,fn)
- {
- if (obj.detachEvent)
- {
- obj.detachEvent( 'on' +type,obj[type+fn]);
- obj[type+fn]= null ;
- }
- else
- obj.removeEventListener(type,fn, false );
- }
-
//addEvent(document.getElementById('foo'),'click',doSomething);
2.《Pro JavaScript Techniques》来看,John Resig大大推荐了Dean Edwards的addEvent()方法,而没推荐自己更精简的作品,他这样评价Edwards的addEvent()的:
1
,可以在所有浏览器中工作,就算是古老得无任何支持的浏览器;
- 2 , this 关键字可在所有的绑定函数中使用,指向的是当前元素;
- 3 ,中和了所有防止浏览器默认行为和阻止事件冒泡的各种浏览器特定函数;
- 4 ,不管浏览器类型,事件对象总是作为第一个对象传入;
- 5 ,唯一缺点是仅工作在冒泡阶段(因为深入使用事件绑定的传统方法)。
- 6 ,addEvent/removeEvent函数如此强大,绝对没有任何理由不在你的代码中使用。
1, 可以在所有浏览器中工作,就算是古老得无任何支持的浏览器; 2, this关键字可在所有的绑定函数中使用,指向的是当前元素; 3, 中和了所有防止浏览器默认行为和阻止事件冒泡的各种浏览器特定函数; 4, 不管浏览器类型,事件对象总是作为第一个对象传入; 5, 唯一缺点是仅工作在冒泡阶段(因为深入使用事件绑定的传统方法)。 6, addEvent/removeEvent函数如此强大,绝对没有任何理由不在你的代码中使用。
而Dean Edwards这样说:
My solution is very different.
* it performs no object detection
* it does not use the addeventListener/attachEvent methods
* it keeps the correct scope (the this keyword)
* it passes the event object correctly
* it is entirely cross-browser (it will probably work on IE4 and NS4)
* and from what I can tell it does not leak memory
下面是Dean Edwards的addEvent/removeEvent函数:
Java代码
- //http://dean.edwards.name/weblog/2005/10/add-event/
- functionaddEvent(element,type,handler){
- if (element.addEventListener){
- element.addEventListener(type,handler, false );
- } else {
- //为每一个事件处理函数赋予一个独立的ID
- if (!handler.$$guid)handler.$$guid=addEvent.guid++;
- //为元素建立一个事件类型的Hash表
- if (!element.events)element.events={};
- //为每对元素/事件建立一个事件处理函数的Hash表
- varhandlers=element.events[type];
- if (!handlers){
- handlers=element.events[type]={};
- //存储已有的事件处理函数(如果已存在一个)
- if (element[ "on" +type]){
- handlers[ 0 ]=element[ "on" +type];
- }
- }
- //在Hash表中存储该事件处理函数
- handlers[handler.$$guid]=handler;
- //赋予一个全局事件处理函数来处理所有工作
- element[ "on" +type]=handleEvent;
- }
- };
- //创建独立ID的计数器
- addEvent.guid= 1 ;
- functionremoveEvent(element,type,handler){
- if (element.removeEventListener){
- element.removeEventListener(type,handler, false );
- } else {
- //从Hash表中删除事件处理函数
- if (element.events&&element.events[type]){
- deleteelement.events[type][handler.$$guid];
- }
- }
- };
- functionhandleEvent(event){
- varreturnValue= true ;
- //获取事件处理对象(IE使用全局的事件对象)
- event=event||fixEvent((( this .ownerDocument|| this .document|| this ).parentWindow||window).event);
- //获取事件处理函数Hash表的引用
- varhandlers= this .events[event.type];
- //依次处理每个事件处理函数
- for (variinhandlers){
- this .$$handleEvent=handlers[i];
- if ( this .$$handleEvent(event)=== false ){
- returnValue= false ;
- }
- }
- return returnValue;
- };
- //增加一些IE事件对象的缺乏的方法
- functionfixEvent(event){
- //增加W3C标准事件方法
- event.preventDefault=fixEvent.preventDefault;
- event.stopPropagation=fixEvent.stopPropagation;
- return event;
- };
- fixEvent.preventDefault=function(){
- this .returnValue= false ;
- };
- fixEvent.stopPropagation=function(){
- this .cancelBubble= true ;
-
};
发表评论
-
Javascript评估用户输入密码的强度的方法 代码
2009-07-28 17:50 706用Javascript评估用户输入密码的强度密码已经是我们生活 ... -
图片和文字放一起,不能居中的解决方法
2009-07-29 14:47 950<td align="center" ... -
解开JavaScript生命的达芬奇密码
2009-08-05 17:56 741解开JavaScript生命的达芬奇密码 ——如何使用Jav ... -
掌控上传进度的AJAX Upload(转贴)
2009-08-05 17:59 713掌控上传进度的AJAX Uploa ... -
Javascript跨域访问解决方案
2009-08-11 20:11 632由于安全方面的考虑,Javascript被限制了跨域访问的能力 ... -
不唐突的JavaScript的七条准则(转载)
2009-08-12 13:18 633经过多年的开发、教学 ... -
浅谈Javascript中的事件流和事件绑定
2009-08-13 16:31 789事件流 浏览器中的事 ... -
JavaScript继承详解(二)
2009-08-17 17:04 623转自:http://www.cnblogs.com/sansh ... -
JavaScript继承详解(一)
2009-08-17 17:04 696转自:http://www.cnblogs.com/sansh ... -
javascript实用技巧--数组.
2009-08-17 17:08 660数组和字符串类型对象的方法我特容易搞混淆,所以把他列出来,免得 ... -
IE和Firefox之间的JavaScript差异
2009-08-17 17:18 585尽管 JavaScript 历史上使用冗长而令人生厌的代码块来 ... -
常见的JavaScript错误
2009-08-17 17:19 737作者: Richardy, 出处:IT ... -
JS获取浏览器窗口大小 获取屏幕,浏览器,网页高度宽度
2009-08-17 17:19 661网页可见区域宽:document.body.clientWid ... -
Javascript的Defer属性
2009-08-17 17:48 710Script中的Defer属性 ... -
最佳的"addEvent"是怎样诞生的
2009-08-18 13:47 641IE的 JScript 存在内存泄露的bug 想必大家都清楚或 ... -
随滚动条移动的层
2009-08-20 15:55 729<!DOCTYPE html PUBLIC &qu ... -
javascript 获取滚动条高度
2009-08-20 16:02 782/******************** * 取窗口滚动 ... -
如何去掉ie里面的关闭按钮,和屏蔽ALT+F4 (转载)
2009-09-01 17:46 788去掉关闭按钮可以使用无边框窗口设计,不过IE6中已经不支持了。 ... -
(window.onunload)只有点击浏览器右上角关闭按钮才执行
2009-09-01 18:31 865<html> <head> &l ... -
带关闭按钮的页面漂浮的代码(IE/FF)
2009-09-01 18:34 657带关闭按钮的页面漂浮的代码,兼容火狐和IE,只需要把Javas ...
相关推荐
此外,还介绍了一个`addEvent`函数,这是一个用于添加事件监听器的函数,它考虑了对同一个事件类型的多个监听器的管理。 4. 事件对象:在处理事件时,会有一个事件对象传递给事件处理函数,通过这个事件对象可以...
- **添加事件**:当调用`addEvent`函数时,事件信息会被添加到`listEvents`中。 - **清除事件**:`flush`方法用于在页面卸载时移除所有已绑定的事件监听器。这里使用了`removeEventListener`和`detachEvent`来确保...
如果该参数为`true`,则事件处理函数会在捕获阶段执行;如果为`false`(默认),则在冒泡阶段执行。在IE8及以上版本,这两个方法也得到了支持,但在此之前,需要使用`attachEvent`和`detachEvent`,它们不支持事件...
因此,为了兼容不同浏览器,我们需要编写一个通用的添加事件监听函数addEvent。在这个函数中,我们首先检查节点是否具有addEventListener方法,如果有,使用W3C标准方法来添加事件监听器,并通过指定第三个参数为...
W3C推荐的`addEventListener`方法允许添加多个事件监听器,且支持事件捕获和冒泡阶段。每个监听函数都可以独立处理事件,`this`指向触发事件的元素。但遗憾的是,Internet Explorer(IE)早期版本不支持此方法。 3...
W3C标准的事件监听方法是`addEventListener`,它允许在同一事件句柄上注册多个监听函数,并可以选择在捕获或冒泡阶段执行。例如: ```javascript elem.addEventListener('click', function() {...}, false); ``` 这...
通常,我们使用`addEventListener`方法添加事件监听器,传入三个参数:事件类型、回调函数和是否在捕获阶段触发。然而,iScroll采取了一种非典型的方式,将事件处理器设置为一个对象,而不是直接使用函数。例如,当...
为了实现跨浏览器的事件绑定,我们可以编写一个兼容函数,如示例中的`addEvent`。这个函数会检查浏览器是否支持`addEventListener`,如果支持就使用该方法,否则回退到`attachEvent`。需要注意的是,当调用这个函数...
element.addEventListener("事件类型", 事件处理函数, 是否使用捕获阶段); ``` - `事件类型`:不包含`on`前缀,例如`click`、`mouseover`。 - `事件处理函数`:当指定的事件发生时被调用的函数。 - `是否使用捕获...
在这段代码中,我们定义了一个名为 `addEvent` 的通用函数,它接受三个参数:`obj` 表示要绑定事件的 DOM 元素,`type` 表示事件类型(如 click、mouseover 等),`fn` 表示事件处理函数。该函数首先检查目标对象...
在JavaScript中,事件处理程序是用于响应用户或浏览器行为的函数。本文将详细阐述JavaScript中的五种事件处理程序方式,帮助开发者更好地理解和使用这些机制。 1. HTML事件处理程序 这是最基础的事件处理方式,通过...
- `this`关键字在事件处理函数中指向触发事件的元素,有助于访问和操作元素。 - **缺点**: - 只支持事件冒泡阶段,不支持事件捕获。 - 一个元素只能绑定一个事件处理函数,新的绑定会覆盖旧的。 - 在非IE浏览...
其中,`element`是你要添加事件的元素,`eventName`是事件类型(如"click"),`eventHandler`是事件处理函数,`useCapture`是一个可选参数,用于指定事件在捕获阶段还是冒泡阶段执行,默认为`false`。 2. **...
如果支持,那么就使用`addEventListener`添加事件处理函数,参数包括事件类型(如`'click'`)、处理函数以及是否使用捕获阶段(通常为`false`,表示使用冒泡阶段)。对于不支持`addEventListener`的浏览器(主要是IE...
这里,`event` 参数指的是需要监听的事件类型(如'click'、'load'等),`function` 是当事件被触发时要执行的函数,`useCapture` 是一个布尔值,指示事件是否在捕获或冒泡阶段执行。通常,为了更好的性能和兼容性,...
该方法包含三个参数:事件类型、要绑定的函数和一个布尔值参数,用来指定监听器在捕获阶段还是冒泡阶段执行。示例代码如下: ```javascript function addEvent(element, e, fn) { if (element.addEventListener) {...
`type`是事件名称(不带"on"前缀),`listener`是事件处理函数,`useCapture`指定事件是采用冒泡还是捕获(通常用`false`表示冒泡)。 2. `removeEventListener(type, listener, useCapture)`:移除元素上指定类型...
也可以编写一个通用的事件监听函数,如:`function addEvent(element, type, handler) { element.addEventListener(type, handler) }`。 8. DOM 和 BOM 的区别 DOM(Document Object Model)是文档对象模型,用于...