Dojo入门:dojo中的事件处理

转载 2015年07月09日 10:10:06

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 的方式一样。

【第一章 dojo】手把手教你Dojo入门

如果仅仅是为了练习Dojo,或者进行测试,可以参考下面的步骤。下面的文件均是在Windows下测试 需要的工具 1 Tomcat服务器:下载地址 选择适合自己的机器型号,即可 2 Dojo的工具...
  • u010251897
  • u010251897
  • 2016年08月03日 12:43
  • 404

Dojo 基础入门(一)

摘要本文介绍了Dojo的基本相关信息,并通过一些简单示例让大家对Dojo有一个初步的感性认识。之后介绍了开发环境的准备以及在开发过程中需要具备的概念。由于新版本的Dojo对以前的0.4版本上做了重大变...
  • kswaking
  • kswaking
  • 2008年03月31日 11:28
  • 1322

Dojo 键盘事件<11>

在这个教程里,我们将解释Dojo的事件标准化和dojo/keys以及如何使用dojo/keys来处理键盘事件。 开始 当键盘上的键被按下时会触发键盘事件。 它包括所有的键, 字母,数字,符号, 标点符...
  • cexo425
  • cexo425
  • 2014年02月18日 17:25
  • 1082

浅析dojo.connect的几种用法(一)——关联事件,不仅仅是DOM Event

介绍       每个流行的工具包中,总有一些异常出彩的闪光点。dojo.connect就是dojo工具包中,与JavaScript事件机制相关的重磅功能。       在JavaScript的使用场...
  • eengel
  • eengel
  • 2011年05月13日 09:56
  • 8749

Dojo初探之4:dojo的event(鼠标/键盘)事件绑定操作(基于dojo1.11.2版本)

前言: 上一章详细阐述了dojo的dom/query操作,本章基于dom/query基础上进行事件绑定操作 dojo的事件 dojo的事件绑定操作分为鼠标和键盘两种 1、鼠标事件 我们沿用上一章中所使...
  • eguid_1
  • eguid_1
  • 2016年08月21日 21:24
  • 1533

dojo dojo中的事件处理

JS为DOM添加事件 在原生的环境下,为DOM添加事件处理函数有多种方法: input type="button" name="btn" value="点击…" id="btn" onclic...
  • windhawk777
  • windhawk777
  • 2014年12月24日 21:20
  • 458

Dojo入门:dojo中的事件处理

JS为DOM添加事件 在原生的环境下,为DOM添加事件处理函数有多种方法: input type="button" name="btn" value="点击…" id="btn" onclic...
  • zhigangsun
  • zhigangsun
  • 2013年10月22日 16:39
  • 377

Dojo 基础入门(五)

1.            Dojo详解1.1.    通用函数1.1.1.      dojo.require在前面的示例中,其实我们已经看到了dojo.require的使用。它是用来声明将要使用的...
  • kswaking
  • kswaking
  • 2008年03月31日 12:57
  • 4400

谈谈Dojo define 和declare的区别

转载:http://blog.csdn.net/eengel/article/details/13021687 同样是de打头,我经常被dojo>define。作用是定义一个模块(modul...
  • Quincylk
  • Quincylk
  • 2013年12月25日 16:58
  • 2521

dojo的一些常用知识

1、添加css  dojo.addClass(dojo.byId("printsportScore"), "choosedItem"); 2、得到某月的天数 var temp=new Date(...
  • lee4755026
  • lee4755026
  • 2012年08月21日 16:47
  • 5109
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Dojo入门:dojo中的事件处理
举报原因:
原因补充:

(最多只允许输入30个字)