掌握Dojo工具包,第3部分:Dojo事件机制

DOM 事件模型

事件是用户与浏览器交互的基础,用户在界面的操作产生事件,浏览器捕获事件后对用户作出反馈。Ajax 技术通过引入异步调用使 web 应用的开发产生了革命性的变化,另一方面 Ajax 也使广大开发人员认识到用户和浏览器的交互可以如此精彩,Web 页面不再死板,开始鲜活起来,开发人员也不再厌恶编写 javascript 的事件处理代码。在 web 页面中,事件一般作用于 DOM 树节点,所以有必要先了解 DOM 的事件模型,包括模型支持那些事件,如何处理 DOM 树结构上的节点的事件等。

清单 1

<html>
 <body>
 <script>
 function sayHello() { alert("hello!"); }
 </script>
 <input id="btn" type="button" onclick="sayHello()" value="hello" />
 </body>
 </html>

清单 1 应该是最为 web 开发人员熟知的事件处理方式了,直接把事件处理函数和控件上的事件属性绑定起来。当用户点击 hello 按钮时,将调用 sayHello() 函数。当然也可以把事件处理函数的代码作为 onclick 的值,参见清单 2,使用这种方式时,onclick 对应的处理脚本应比较简单短小,在 onclick 后面写上一大串 javascript 脚本可不是什么好主意。

清单 2

<html>
 <body>
 <input id="btn" type="button" onclick="javascript:alert('hello');" value="hello" />
 </body>
 </html>

另一种略微高级的方法是在控件之外绑定控件的事件处理函数,见清单 3 。

清单 3

<html>
 <body>
 <input id="btn" type="button" value="hello" />
 <script>
 document.getElementById("btn").onclick=sayHello;
 function sayHello() { alert('Hello'); }
 </script>
 </body>
 </html>

在清单 3 的例子中,首先通过 document.getElementById 获取需要绑定事件的控件,再把控件的 onclick 事件设置为事件处理函数,其效果与前面的例子是一样的。需要注意的是,script 脚本放到了控件后面,因为使用了 document.getElementById 去获控件,而 javascript 是解释执行的,必须保证控件在执行到 getElementById 之前已经创建了,否则会出现找不到控件的错误。但 sayHello 为什么会在事件绑定语句的后面呢?按照刚才的原则,不是必须确保 sayHello 已经预先定义好了吗?其实不然,事件处理函数的代码直到事件发生时才被调用,此时才会检查变量是否已经定义,函数是否存在,而页面初次加载时按钮上的 click 事件是不会发生的。页面加载后用户再点击按钮,sayHello 函数已经完全加载到页面中,函数是存在的。当然如果是普通的函数调用,一定要保证被调用函数出现在调用函数之前。采用清单 3 所示的这种方式时,在 web 应用比较复杂时,可以把事件处理函数集中放在一起,比如单独存放在一个文件中,方便以后查找,修改。这个例子也很好的说明了 javascript 是一种解释执行的脚本语言。

前面三种事件处理方式是在 W3C DOM Level0 中定义的,是不是简单易用?但是似乎太简单了,缺少一些东西。首先一个事件只能绑定一个处理函数,不支持多个事件处理函数的绑定。如果开发人员被迫把事件处理代码都放在一个函数中,代码的模块性会很差。其次解除事件处理函数的绑定的方式很不友好,只能把它设为空值或者空串。

document.getElementById("btn").onclick=null;
 document.getElementById("btn").onclick="";

时间: 2025-01-01 14:38:51

掌握Dojo工具包,第3部分:Dojo事件机制的相关文章

掌握Dojo工具包,第5部分:Dojo的UI组件库

Dijit 简介 从 Dojo 0.9 开始,Dojo 把 Widget 从 Dojo 的核心包中分离出来,组成 Dijit .Dojo 在 Dijit 中为 Widget 家族添加了多位成员,增强了 Widget 的实力的同时也加快了其在页面中的加载速度. 为改善 Widget 的外观,Dijit 提供了多套样式主题,比如默认绑定的样式主题 Tundra,提高页面可访问性的样式主题 A11y,以及其它两种可供选择的主题 Soria 和 Nihilo .并且开发人员还可以根据自身项目的需求开发个

使用Dojo工具包和JSON-RPC构建企业SOA Ajax客户端

引言 异步JavaScript和XML (Ajax)是使用本机浏览器技术构建富Web应用程序的新方法.对于编写需要某些类型的"活动"用户界面的复杂应用程序的开发人员,JavaScript 在这方面已经做得很好.不过,JavaScript 难于编码.调试.移植和维护.使用 Ajax 工具包有助于最大程度地减少使用 JavaScript和Ajax 带来的许多常见问题.优秀的Ajax 工具包提供了一组可重用的小部件.用于扩展和创建小部件的框架.事件系统.JavaScript 实用工具和增强的

掌握Dojo工具包,第4部分:Dojo中的拖拽

Dojo 支持的两种拖拽方式 在开始尝试了解实现 Dojo 拖拽效果的使用方法以前,首先必须明确拖拽具有两种截然不同的表现效果. 第一种表现效果是图标被拖拽到哪里,其就会被直接放到哪里,这个拖拽效果是图标完全紧跟拖拽的动作,与每一个拖拽动作的运动轨迹完全契合,这种效果被称为 "拖动".第二种表现效果是当图标被拖拽到一个地方,松开鼠标的时候,图标会以当前位置为基础而以其它图标为参照系进行位置的自动调整.这种效果被称为 "拖放". Dojo 的拖动 "拖动&q

Dojo之路:如何利用Dojo实现Drag and Drop效果_dojo

如今各种使用AJAX技术的站点都实现了Drag and Drop(拖动)效果,利用Dojo框架也可以很方便的实现,相比较其它框架,代码更少,且对浏览器的兼容性支持比较好. 先看一下效果,以下是51AJAX.com站点首页的效果,其中各个模块是可以任意拖动的: screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse w

Spring4.1新特性——异步调度和事件机制的异常处理

Spring 4.1对异步调用提供了AsyncResult及SuccessCallback.FailureCallback.和异常处理的支持:对事件调度也提供了相应的异常处理器.   1.事件调度异常处理器 1.1.定义异常处理器: Java代码   public class MyErrorHandler implements ErrorHandler {       @Override       public void handleError(Throwable throwable) {  

Flash AS3.0 强大的事件机制

ActionScript 3.0系列教程(4):爽快使用XML ActionScript 3.0系列教程(5):强大的事件机制 回顾和比较 AS1.0玩家最爱用onClipEvent(), on(),又方便又直接.缺点在于逻辑分散到了各个舞台元件中,难以管理和维护.更加别说代码重用了.别跟俺说可以Copy, Paste,这不叫重用,这叫低级. AS2.0中,增加了一些事件处理机制: (1)回调函数: onLoad, onComplete等.相信兄弟们最熟悉的应该就是XML.onload回调函数了

C#事件机制学习

C#的事件机制是基于委托实现的.实现一个事件,要先定义一个委托类型class1{ public delegate void mydelegate (myEventArgs e); public event mydelegate event1;}然后我们可以使用+=和-=注册.移除事件class1.event1 += new mydelegate(new myEventArgs());在class中引发事件时最好这样class1{ public fireEvent() { if(event1 !=

PHP实现事件机制实例分析

  本文实例讲述了PHP实现事件机制的方法.分享给大家供大家参考.具体分析如下: 内置了事件机制的语言不多,php也没有提供这样的功能.事件(Event)说简单了就是一个Observer模式,实现起来很容易.但是有所不同的是,事件的监听者谁都可以加,但是只能由直接包含它的对象触发.这就有一点点难度了.php有一个debug_backtrace函数,可以得到当前的调用栈,由此可以找到判断调用事件触发函数的对象是不是直接包含它的对象的办法. ? 1 2 3 4 5 6 7 8 9 10 11 12

浅析JavaScript中的事件机制

  这篇文章主要介绍了JavaScript中的事件机制,即JS与HTML的一般交互,需要的朋友可以参考下 事件是什么 ? JavaScript与HTML交互是通过在用户或浏览器操纵页面上发生的事件进行处理. 当页面加载,这是一个事件.当用户点击一个按钮,这一下,也就是一个事件.事件的另一个例子是类似按下任意键,关闭窗口,调整窗口等. 开发者可以使用这些事件执行JavaScript编码响应,这引起按钮以关闭视窗,消息,以便显示给用户,要验证的数据,以及几乎任何其它类型的响应可以发生的. 事件是文档

PHP实现事件机制实例分析_php技巧

本文实例讲述了PHP实现事件机制的方法.分享给大家供大家参考.具体分析如下: 内置了事件机制的语言不多,php也没有提供这样的功能.事件(Event)说简单了就是一个Observer模式,实现起来很容易.但是有所不同的是,事件的监听者谁都可以加,但是只能由直接包含它的对象触发.这就有一点点难度了.php有一个debug_backtrace函数,可以得到当前的调用栈,由此可以找到判断调用事件触发函数的对象是不是直接包含它的对象的办法. <?php /** * 事件 * * @author xiez