Dojo入门:dojo中的事件处理

简介:

JS为DOM添加事件

在原生的环境下,为DOM添加事件处理函数有多种方法:

<input type="button" name="btn" value="点击…" id="btn" onclick="btnClick" />

或者使用以下方法:

复制代码
    <input type="button" name="btn" value="点击…" id="btn" />
    <script type="text/javascript">
        function btnClick() {
            alert("我被点击了");
        }
        document.getElementById("btn").onclick = btnClick;</script>
复制代码

以上这两种方法存在明显的弊端:每一个事件只能指定一个事件处理函数,另外,如果要移除一个事件处理函数,似乎只能使用:

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

或者

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

这种方式极不利于模块化编程。W3C DOM Level2 标准有了新的事件模型,新的事件模型允许为事件添加多个处理方法,并加入了事件冒泡机制。

使用新的事件模型来添加事件处理方法:

复制代码
    <input type="button" name="btn" value="点击…" id="btn" />
    <script type="text/javascript">
        function btnClick() {
            alert("我被点击了");
        }
        document.getElementById("btn").addEventListener("click", btnClick);
    </script>
复制代码

移除一个事件处理方法:

document.getElementById("btn").removeEventListener("click", btnClick);

dojo事件处理

dojo使用connect方法为DOM添加事件处理函数。

复制代码
    <script type="text/javascript">
        function btnClick() {
            alert("我被点击了");
        }
        var btn = dojo.byId("btn");
        dojo.connect(btn, "onclick", btnClick);
    </script>
复制代码

dojo.connect方法的官方解释:dojo.connect is the core event handling and delegation method in Dojo. It allows one function to "listen in" on the execution of any other, triggering the second whenever the first is called. Many listeners may be attached to a function, and source functions may be either regular function calls or DOM events.

翻译过来大概是:dojo.connect 是dojo中事件处理和委托方法的核心。它允许一个方法去“监听”另一个方法的执行,当被监听方法被调用的时候触发监听方法。一个方法可以附加很多监听者,这个源方法可以是常规的方法或DOM事件。

这么说来,connect还可以监听别的方法的执行,下面我们来做一个测试:

复制代码
    <input type="button" name="btn" value="点击…" id="btn" />
    <script type="text/javascript">
        function sayHello() {
            alert("Hello ");
        }

        function sayWorld() {
            alert("world~");
        }

        dojo.addOnLoad(function () {
            var btn = dojo.byId("btn");
            btn.addEventListener("click", sayHello);
            dojo.connect("sayHello", sayWorld);
        });
    </script>
复制代码

这段代码的执行效果是当按钮被点击之后,先弹出一个Hello字符串,当把对话框关掉以后,会弹出另外一个world对话框。

可能不是每个人都喜欢这种处理方式,但这样以来,代码会更易于阅读。

如果需要移除一个事件,则需要调用dojo.disconnect方法,这个方法需要一个dojo.connect方法的返回值作为参数:

        var handle = dojo.connect(btn, "onclick", btnClick);
        dojo.disconnect(handle);

订阅和发布

这是dojo很值得关注的一个功能,它使得各个dojo组件可以方便的交互。这个功能使用起来很方便:

复制代码
    <input type="text" name="txtMessage" value="" id="txtMessage" />
    <input type="button" name="btn" value="发布…" id="btnPublish" />
    <script type="text/javascript">
        dojo.addOnLoad(function () {
            //订阅MesagePublish主题
            dojo.subscribe("MessagePublish", function (msg) {
                alert(msg);
            });

            var btnPublish = dojo.byId("btnPublish");
            dojo.connect(btnPublish, "onclick", function () {
                dojo.publish("MessagePublish", dojo.byId("txtMessage").value);
            });
        });
    </script>
复制代码

以上代码的运行效果如图:

如要取消一个订阅,需要使用dojo.unsubscribe方法,这个方法需要一个由dojo.subscribe返回的句柄,其处理方式和dojo.connect、dojo.disconnect 的方式一样。




本文转自齐师傅博客园博客,原文链接:http://www.cnblogs.com/youring2/archive/2012/06/10/2544168.html,如需转载请自行联系原作者

相关文章
N..
|
6月前
|
JavaScript 前端开发
jQuery事件处理
jQuery事件处理
N..
59 1
|
JavaScript
JQuery——事件处理
JQuery——事件处理
59 0
|
存储 JavaScript 前端开发
Dojo学习和常用知识
@[TOC](目录) Dojo 是一个流行的 JavaScript 库,用于开发 Web 应用程序。它提供了许多功能,如 DOM 操作、事件处理、动画效果、数据存储和许多其他实用功能。在今天的 Web 开发中,Dojo 仍然被广泛使用,尤其是在企业级应用程序开发中。 下面是一个详细的 Dojo 详解,包括代码实例。 # 一、Dojo 的基本概念 1. Dojo 模块 Dojo 模块是 Dojo 的基本构建块。每个模块都是一个 JavaScript 文件,它包含了实现特定功能的代码。模块可以分为两类:核心模块和扩展模块。 核心模块是 Dojo 库的基础部分,提供了许多基本的功能,如 DOM 操作
168 0
|
JavaScript
jquery事件处理-44
jquery事件处理-44
89 0
|
JavaScript 前端开发
jQuery系列 第六章 jQuery框架事件处理
第六章 jQuery框架事件处理 JavaScript以事件驱动来实现页面的交互,其核心是以消息为基础,以事件来驱动。虽然利用传统的JavaScript事件处理方式也能够完成页面交互,但jQuery框架增加并扩展了基本的事件处理机制,jQuery框架提供了更加优雅的事件处理语法,并极大的增强了事件处理能力。
1124 0
|
JavaScript 前端开发 CDN