Dojo入门(3)—事件

介绍

跟一般意义上的Web程序员的DOM事件不同,Dojo支持更广泛意义上的事件。使用dojo.event.*工具,开发者可以处理任何可以被监听到的事件(包括DOM事件)。使用DOJO,程序可以使用一致的方法来监听任何动作。@H_301_49@

在这章文章中我们将向你展示:@H_301_49@

·如何使用这些工具;@H_301_49@

·为什么它跟你以前使用的javascript事件系统完全不同;@H_301_49@

·为什么没有dojo.event.connect()你就不想写javascript程序;:-)@H_301_49@

示例:

使用dojo.event.connect()能帮助你handle需要的DOM节点中的动作:@H_301_49@

var handlerNode = document.getElementById("handler"); @H_301_49@

@H_301_49@

function handleOnClick(evt){ @H_301_49@

// ... @H_301_49@

} @H_301_49@

@H_301_49@

dojo.event.connect(handlerNode,"onclick","handleOnClick"); @H_301_49@

@H_301_49@

一般说来,IE会容易我们的书写的函数中的第一个参数:DOM事件对象,IE会要求使用window.event.connect()方法显式安装这个对象,用来确认是否传送了此对象,如果没有则忽略掉。现在,使用我们的connect(),你可以不再写这样的代码了。 @H_301_49@

如果你不想命名你的函数呢?下面的代码跟上面的代码是等价的: @H_301_49@

var handlerNode = document.getElementById("handler"); @H_301_49@

@H_301_49@

dojo.event.connect(handlerNode,function(evt){ @H_301_49@

// ... @H_301_49@

}); @H_301_49@

@H_301_49@

至此,我们可以完成将DOM节点的onclick事件跟函数相联了,虽然我们什么都没有做。但,如何将Dom节点的事件跟一个对象的方法(要知道:js可是一个oob语言了)相关联呢?一般说来,我们可以这样做(一般js的做法) @H_301_49@

var handlerNode = document.getElementById("handler"); @H_301_49@

@H_301_49@

handlerNode.onclick = function(evt){ @H_301_49@

object.handler(evt); @H_301_49@

}; @H_301_49@

@H_301_49@

Dojo而言,则可以这样: @H_301_49@

@H_301_49@

var handlerNode = document.getElementById("handler"); @H_301_49@

@H_301_49@

dojo.event.connect(handlerNode,object,"handler"); @H_301_49@

connetc()可以确保handlerNode.onclick()调用时,object.handler()同样也能被调用javascript的语法限制了将objectfunction写在一起传递,使用分割的方式可以同样实现这一点。 @H_301_49@

connect()也可以显示支持多监听器,它们将按它们注册的顺序执行。例如: @H_301_49@

var handlerNode = document.getElementById("handler"); @H_301_49@

@H_301_49@

dojo.event.connect(handlerNode,"handler"); @H_301_49@

dojo.event.connect(handlerNode,"handler2"); @H_301_49@

connetc()可以确保handlerNode.onclick()调用时,object.handler()同样也能被调用javascript的语法限制了将objectfunction写在一起传递,使用分割的方式可以同样实现这一点。 @H_301_49@

connect()也可以显示支持多监听器,它们将按它们注册的顺序执行。例如: @H_301_49@

var handlerNode = document.getElementById("handler"); @H_301_49@

@H_301_49@

dojo.event.connect(handlerNode,"handler"); @H_301_49@

dojo.event.connect(handlerNode,"handler2"); @H_301_49@

相关文章

参考博客:https://blog.csdn.net/blog_szhao/article/details/50220181           https://doj...
我有一个包含多个字段的Dojo DataGrid.我目前正在设置查询一次搜索一个字段,如下所示: grid.setQuery(...
我正在使用JsonRestStore,但想为它添加一个自定义Accept标头.最好的方法是什么? 这与dijit.layout.Con...
我需要选择一个给定其URL的链接节点.使用属性选择器的效果非常好,除了少数几个url有tilda的情况.我无法...
我正在尝试使用Dojo JSONREST的增强网格,我遇到了一些问题. 我一直在寻找一些例子,但无法弄清楚如何做我...
如何根据一些运行时参数隐藏dgrid(gridFrom Html)中的完整列? 让我们说如果参数的值为true我应该能够显...