`
hj149
  • 浏览: 86162 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

JS添加事件处理函数

阅读更多
作为一种事件驱动的编程语言,Js的程序很少主动执行,一般都是由一些事件触发,像click,dblclick,keypress,mousemove等事件,然后执行一段脚本。给一个事件指派一个处理函数,一般称做:注册事件处理函数。

    比如页面上有一个p元素:
       <p id=’lethe’>测试一下</p>
    我们用
        x = document.getElementById(’lethe’)
    得到了这个结点。现在尝试给它添加一个鼠标点击的事件,当鼠标点击的时候,弹出一句话:
       “测试成功!”
    事件处理函数很简单:function beLessForgetfull(){ alert(”测试成功”) }

    很遗憾的是,不同的浏览器添加事件处理函数的方法不太一样。主要有三种:
    传统方式,把事件处理函数做为DOM元素的一个属性,像onclick,onmouseover等。现代浏览器一般会兼容这种写法。
       x.onclick = beLessForgetfull;
    传统方式的缺点是,不能给一个元素的一种事件定义两个事件处理函数,因为后面添加的函数会覆盖前面的。

高级方法:
    IE系列的:attachEvent(eventType, handler)
       x.attachEvent(’onclick’, beLessForgetfull);
    W3CDOM定义的:addEventListener(eventType, handler, capture),多了一个capture参数,是boolean类型的。如果是false,表示事件冒泡。如果为true则表示事件捕捉。IE只支持冒泡,所以通常都是false。
       x.addEventListener(’click’, beLessForgetfull, false);
    优点就是,可以给一个元素一种事件注册多个处理函数。

添加了事件处理函数,如果在不用的时候,自然应该可以移除。
传统方式注册的处理函数,要移除就非常简单了。
    el.onclick = null;   // 移除click处理函数。

高级方法注册了的事件处理函数,要用detachEvent或removeEventListener来移除。参数和attachEvent或addEventListener一样。
    x.detachEvent(’onclick’, beLessForgetfull);

    x.removeEventListener(’click’, beLessForgetfull);
但是如果要移除所有的事件处理函数,因为没有一个方法可以找到所有注册在一个元素上的事件处理函数,所以需要写程序的人自己去记住这些函数,然后一个一个地去除。

IE的attachEvent还有一个问题是,事件处理函数是全局的。就是说,在事件处理函数里,this是等于window的。
要解决这一点并不太难。这是例子:
4 function addEventSimple(evt, el, handler){
5     if(el.addEventListener){
6         el.addEventListener(evt, handler, false);
7     }else if(el.attachEvent){
8         el.attachEvent(’on’+evt, function(){
9             return handler.call(el, window.event);
10         });
11     }else{
12         //var oldHandler = el['on'+evt] || function(){};
13         el['on'+evt] = handler;
14     }
15 }
用到了函数对象的call方法,这个方法和apply方法,都是可以指定函数里的this对象的,它们的差别只在于参数传递方式的不一样。
上面的例子的最后的else部分,还没有写完。原先是想让只支持传统方式的浏览器也可以注册多个事件处理函数。

不过,对于这个addEventSimple,如果要再写一个移除事件处理函数的,就是removeEventComplex,如果只是复杂还好,似乎还是不可能的。在jQuery,似乎是用了一个$Event对象在管理所有的事件注册和移除
分享到:
评论

相关推荐

    eep-js, eep.js 嵌入式事件处理.zip

    eep-js, eep.js 嵌入式事件处理 eep.js 嵌入 Node.js的事件处理概述eep.js 是复杂事件处理( CEP )的小型轻量级子集,它将聚合函数和窗口流操作添加到 Node.js. 中。我在Cloud的中介绍了 eep.js,在的会议上,在会议...

    事件高级用法及兼容写法

    一、事件基础 1.事件函数 obj.on-事件名=fn 定义事件的时候,事件函数不会自动执行,当事件触发的...将事件添加到父元素上,当事件发生时,父元素会找到对应触发事件的子元素去处理,后期添加的子元素,依然有这个事件

    多文件上传组件添加了服务器反馈信息事件,可以接收每次上传文件后,服务器返回的文本信息,调用JAVASCRIPT函数

    添加了服务器反馈信息事件,可以接收每次上传文件后,服务器返回的文本信息,调用JAVASCRIPT函数 challs_flash_onCompleteData() 添加了Form表单文本域Name属性的设置 修正了若干BUG 1.0.1 bate 版 添加了每个...

    常用js函数八枚

    常用js函数八枚,对于入门者很有帮助. 添加、去除事件处理函数的方法/去除事件监听者:detachEventListener()/检查浏览器/根据特定属性值来选择元素 等等

    原生js事件的添加和删除的封装

    在IE浏览器中添加或删除事件用attachEvent、detachEvent。在其他标准浏览器中则用addEventListener、...* 事件处理函数 */ function bind(target, type, func) { if (target.addEventListener) {// 非ie 和ie9 target.

    Jquery 动态添加元素并添加点击事件实现过程解析

    给动态添加的元素添加js事件,不能直接添加js事件,需要借助on( )方法,给选择器指定的子元素添加事件处理函数,并非选择器本身; 1. 语法 $(selector).on(event,childSelector,data,function) // event _ 需要...

    js 事件处理函数间的Event物件是否全等

    1:在fna里对Event物件添加的属性,在其后执行的fnb函数里是对于Event物件是否能访问到? 2:执行fna/fnb函数时的Event物件是否全等 Eventfna===Eventfnb ? 标准的文档太长哪里是说明了这里的规则呢?懒吧… 对于...

    原生js+ajax通用函数+php

    本函数封装了js的ajax,php为处理后台数据,仅支持post,代码很简洁

    JavaScript详解(第2版)

     13.6.7 HTML事件处理函数和JavaScript事件方法   13.6.8 onError事件   13.7 event对象   13.7.1 捕获和冒泡(滴漏和冒泡)   13.7.2 事件对象属性   13.7.3 使用事件对象属性   13.7.4 将事件...

    JavaScript为事件句柄绑定监听函数实例详解

    本文实例讲述了JavaScript为事件句柄绑定监听...a、传统的绑定方法,非常简单稳定,函数体内的this指向的也是指向正在处理事件的节点(如当前正在运行事件句柄的节点)。 b、一个元素的一个事件句柄只能注册一个函数,

    JavaScript语言教程(含有基础语法、常用方法以及一些实际案例,包括变量和数据类型、条件语句和循环、函数、事件处理等内容)

    本教程介绍了 JavaScript 的基础语法、常用方法以及一些实际案例,包括变量和数据类型、条件语句和循环、函数、事件处理等内容。JavaScript 是一种强大的脚本语言,可以用于开发各种交互式网页和 Web 应用。

    纯JavaScript实现的兼容各浏览器的添加和移除事件封装

    //事件处理兼容各种浏览器,采用能力检测方法,所谓能力检测,就是... //非IE浏览器采用dom2级事件处理,type为事件类型如:click,handler为事件处理函数,false代表事件采用冒泡处理模型,如果是true代表 采用捕获型

    std-js:标准JavaScript函数和polyfills库

    标准js一个JavaScript库,用于使前端开发变得明智导航该库的目的不只是提供jQuery等的替代方案,而是提供本机JavaScript的polyfills和wrapper,从而可以使用现代JavaScript,而不必为浏览器支持和实现带来麻烦。...

    js 动态给元素添加、移除事件的实现方法

    最近项目中要要到 js动态给给元素绑定事件,刚好之前没用到过这些,顺便学习一下,于是google了一下 事件,写了如下两个事件 一个添加事件 ,一个是移除事件 /addEventListener(),removeEventListener()用于处理...

    JS的事件绑定深入认识

    脚本模型是将事件处理函数写到js文件中,从页面获取元素进行对应事件函数的绑定以触发执行。但也存在不足之处: 1.一个事件绑定多个事件监听函数,后者将覆盖前者。 2.需要限制重复绑定的情况 3.标准化event对象 二...

    客户端统一验证JavaScript函数库及示例源码

    CancelClientEvent()是使用事件冒泡阻止了事件的继续执行,同时设置返回值,最终成功阻止事件的继续往后执行,当在客户端触发一要回发的按钮事件是,想在程序里结束让其继续执行时,以往则不是很好处理,如Enter键,...

    JSEventForm:JS 中的事件处理和解析表单

    JS 中的事件处理和解析表单 我创建了这个项目作为我自己的事件处理和表单解析解决方案。 在我的工作中,我不喜欢有很多事件监听器或大型开关盒。 此外,由于我使用了很多表单,因此我想排除一些逻辑,这些逻辑可以为...

    WebTree Maker(树型网页菜单编辑器) v1.3

    提供了一个所见即所得的环境,包括一个直观的CSS样式编辑器。...通过添加事件处理函数和回调函数,你可以设置所需的行为特性或进行二次开发,脚本已内置的一些很有用的功能,如支持拖放操作, 动态载入等。

    (树型网页菜单编辑器

    WebTree Maker是一个所见即所得的环境,包括一个直观的CSS样式编辑器。...通过添加事件处理函数和回调函数,你可以设置所需的行为特性或进行二次开发,脚本已内置的一些很有用的功能,如支持拖放操作, 动态载入等。

Global site tag (gtag.js) - Google Analytics