Dojo学习笔记(8. dojo.event & dojo.event.topic & dojo.event.browser)

模块:dojo.event

终于进入有名的dojo事件处理系统的学习了,学习前建议读者先去补习一下AOP的相关知识

dojo.event.connect

绑定指定的方法到指定的对象的方法上

Usage Example:

简单绑定1

function doOnClick1()
{
 alert("Clicked!");
}
dojo.event.connect(dojo.byId("inputTest"),"onclick","doOnClick1");

简单绑定2

obj = { doOnClick2: function(){ alert("Clicked!");}}
dojo.event.connect(dojo.byId("inputTest"),"onclick",obj,"doOnClick2");

如果存在需要进行多个事件的绑定的时候,你就会看到dojo的方便之处了

obj2 = { doOnClick2: function(){alert("Clicked!");}}
dojo.event.connect(dojo.byId("inputTest"),"onclick",obj,"doOnClick2");
dojo.event.connect(dojo.byId("inputTest"),"onclick",obj2,"doOnClick2");

connect可以对任何对象的方法进行绑定,而不是只能针对DOM对象

dojo.event.connect(obj,"doOnclick2","doOnClick1"); //在调用obj.doOnclick2()后调用doOnClick1()

dojo.event.connectBefore

dojo.event.connect默认是后绑定,connectBefore则是早绑定,绑定的方法将在指定方法前执行,用法与connect一致

dojo.event.connectAround

Usage Example:

function aroundTest(invocation){
  //此处可以增加代码,比如检查参数(invocation.args)
  var result = invocation.proceed();
  //此处可以增加代码,比如修改结果(result)
  return result;
}
dojo.event.connectAround(dojo.byId("inputTest"),"onclick","aroundTest");

dojo.event.connectOnce
说起这个函数,还真的是让我想了半天,直觉上我就把它想象成executeOnce,结果测试的结果让我差点想不通
connectOnce就是指保证只绑定一次,来避免重复绑定会导致的重复执行的问题

dojo.event.disconnect

解除绑定,调用参数与connect一致,即可解除之前的绑定操作

dojo.event.log

在执行指定对象的指定方法后自动记录日志

Usage Example:

dojo.event.log(obj, "doOnClick"); //当调用obj.doOnClick时记录下日志"DEBUG:  ([object Object]).doOnClick : "

你也可以这样写:

dojo.event.log({srcObj: obj, srcFunc: "doOnClick"});

dojo.event.kwConnect

kwConnect可以做到更加灵活的绑定,比如可以设置延迟执行绑定

Usage Example:

dojo.event.kwConnect({
  srcObj: dojo.byId("inputTest"),
  srcFunc: "onclick",
  adviceObj: obj,
  adviceFunc: "doOnclick2",

type: "before", //默认为"after",可选: "before", "around",注意:type是用来决定adviceFunc的行为的,如果为"around",则aroundFunc将失效
  aroundObj: null,
  aroundFunc: null, //如果指定了aroundFunc,则其将对adviceFunc进行拦截,但是当type为"around"时,则aroundFunc将不会执行
  once: false, //默认为false,允许重复绑定
  delay: 3000, //延时3秒后执行adviceFunc
  rate: 0, //这个从源代码没有看懂起什么作用
  adviceMsg: false //这个从源代码没有看懂起什么作用
});

dojo.event.kwDisconnect

用来解除使用kwConnect指定的绑定

模块:dojo.event.topic

Topic机制与Advice机制都能够实现事件的绑定,但是显然,Topic更适合处理多重绑定。
发布主题,然后由用户订阅的机制就是一个典型的观察者模式

dojo.event.topic.registerPublisher

注册主题发布器

Usage Example:

dojo.event.topic.registerPublisher("myTopic", obj, "doOnClick2");

dojo.event.topic.subscribe

订阅主题

Usage Example:

dojo.event.topic.subscribe("myTopic", "test"); //执行obj.doOnClick2()以后会自动执行test()

dojo.event.topic.unsubscribe

取消订阅主题

Usage Example:

dojo.event.topic.unsubscribe("myTopic", "test");

dojo.event.topic.destroy

删除主题,此主题所有的订阅都将失效

Usage Example:

dojo.event.topic.destroy("myTopic");

模块:dojo.event.browser

dojo.event.browser.addListener

增加监听器

Usage Example:

function listener()
{
  alert("ok");
}
dojo.event.browser.addListener(document, 'mousedown', listener); //事件名称可以加上"on",也可以没有"on"
dojo.event.browser.addListener(document, 'onmousedown', listener, true); //capture为真表示不受上层元素的事件控制

dojo.event.browser.removeListener

清除监听器(这个方法似乎是无效的)

dojo.event.browser.callListener

调用监听器

Usage Example:

dojo.event.browser.callListener(listener, document);

dojo.event.browser.stopPropagation

阻止Event传播

Usage Example:

dojo.event.browser.stopPropagation();

dojo.event.browser.preventDefault

将当前事件的返回值设置为false

Usage Example:

dojo.event.browser.preventDefault();

dojo.event.browser.keys

键定义:
  KEY_BACKSPACE: 8,
  KEY_TAB: 9,
  KEY_ENTER: 13,
  KEY_SHIFT: 16,
  KEY_CTRL: 17,
  KEY_ALT: 18,
  KEY_PAUSE: 19,
  KEY_CAPS_LOCK: 20,
  KEY_ESCAPE: 27,
  KEY_SPACE: 32,
  KEY_PAGE_UP: 33,
  KEY_PAGE_DOWN: 34,
  KEY_END: 35,
  KEY_HOME: 36,
  KEY_LEFT_ARROW: 37,
  KEY_UP_ARROW: 38,
  KEY_RIGHT_ARROW: 39,
  KEY_DOWN_ARROW: 40,
  KEY_INSERT: 45,
  KEY_DELETE: 46,
  KEY_LEFT_WINDOW: 91,
  KEY_RIGHT_WINDOW: 92,
  KEY_SELECT: 93,
  KEY_F1: 112,
  KEY_F2: 113,
  KEY_F3: 114,
  KEY_F4: 115,
  KEY_F5: 116,
  KEY_F6: 117,
  KEY_F7: 118,
  KEY_F8: 119,
  KEY_F9: 120,
  KEY_F10: 121,
  KEY_F11: 122,
  KEY_F12: 123,
  KEY_NUM_LOCK: 144,
  KEY_SCROLL_LOCK: 145

dojo.event.browser.currentEvent

最近一次的Event,其属性包括:

altKey  //检查alt键的状态,当alt键按下时,值为 true
button  //检查按下的鼠标键,0 没按键,1 按左键,2 按右键,3 按左右键,4 按中间键,5 按左键和中间键,6 按右键和中间键,7 按所有的键
  //这个属性仅用于onmousedown, onmouseup, 和 onmousemove 事件。对其他事件,不管鼠标状态如何,都返回 0(比如onclick)
clientX  //返回鼠标在窗口客户区域中的X坐标
clientY  //返回鼠标在窗口客户区域中的Y坐标
ctrlKey  //检查ctrl键的状态,当ctrl键按下时,值为 true
fromElement //检测 onmouseover 和 onmouseout 事件发生时,鼠标所离开的元素
keyCode  //检测键盘事件相对应的内码,仅当type为keydown,keyup,keypress时才有效
offsetX  //检查相对于触发事件的对象,鼠标位置的水平坐标
offsetY  //检查相对于触发事件的对象,鼠标位置的垂直坐标
propertyName //设置或返回元素的变化了的属性的名称,你可以通过使用 onpropertychange 事件,得到 propertyName 的值
screenX  //检测鼠标相对于用户屏幕的水平位置
screenY  //检测鼠标相对于用户屏幕的垂直位置
shiftKey //检查shift键的状态,当shift键按下时,值为true
srcElement //返回触发事件的元素
srcFilter //返回触发 onfilterchange 事件的滤镜
toElement //检测 onmouseover 和 onmouseout 事件发生时,鼠标所进入的元素
type  //返回没有“on”作为前缀的事件名,比如click, mousedown
x  //返回鼠标相对于css属性中有position属性的上级元素的x轴坐标。如果没有css属性中有position属性的上级元素,默认以BODY元素作为参考对象
y  //返回鼠标相对于css属性中有position属性的上级元素的y轴坐标。如果没有css属性中有position属性的上级元素,默认以BODY元素作为参考对象
target  //同srcElement
currentTarget
layerX  //同offsetX
layerY  //同offsetY
pageX  //无水平滚动条的情况下与clientX同
pageY  //无水平滚动条的情况下与clientY同
relatedTarget // 仅当type为mouseover,mouseout时才有效
keys  //与dojo.event.browser.keys相同,仅当type为keydown,keyup,keypress时才有效
charCode //键值,仅当type为keypress时才有效

dojo.event.browser.isEvent

判断指定对象是否为event对象

Usage Example:

dojo.event.browser.isEvent(dojo.event.browser.currentEvent); //当dojo.event.browser.currentEvent不为null时返回true

Dojo学习笔记(8. dojo.event dojo.event.topic dojo.event.browser)相关推荐

  1. Dojo学习笔记(7. dojo.dom)

    Dojo学习笔记(7. dojo.dom) 模块:dojo.dom dojo.dom.isNode 测试指定对象是否为节点 Usage Example: dojo.dom.isNode(dojo.by ...

  2. Dojo学习笔记(一):Hello Dojo!

    欢迎来到Dojo世界!在这篇文章中你将会学习到如何加载Dojo以及探索Dojo的一些核心功能.你还会了解Dojo的基于AMD的模块架构,探索如何加载额外的模块来增加功能到您的Web站点或应用程序,并找 ...

  3. Dojo学习笔记(三):类化JavaScript

    dojo/_base/declare模块是Dojo Toolkit中创建类的基础.declare支持多重继承,这使得开发者能够编写更加灵活的代码并避免代码多次重写.Dojo.Dijit和Dojox模块 ...

  4. Dojo学习笔记一: 认识Dojo

        打算利用一些时间系统并且略深层次的学习一下Dojo这个框架,一个基于JavaScript脚本语言的集合.      Dojo不但提供各式各样的Javascript标准库方法,还包含了功能丰富的 ...

  5. dojo 学习笔记之dojo.query - query(id) 与query(class)的差别

    考虑这个样例:动态创建一个页面的时候,用new listtem()生成多个listitem, 且每一个listitem中都生成一个按钮button. 假设想要给每一个按钮都绑定一个click事件,用d ...

  6. Dojo学习笔记(六):dojo/_base/declare

    1.JavaScript 继承方式 (1)对象冒充 在 JavaScript 中,构造函数也和普通的函数一样,可以被赋值和调用,对象冒充通过此原理来模拟继承. 1 2 3 4 5 6 7 8 9 10 ...

  7. Composite UI Application Block学习笔记之Event Broker

    Composite UI Application Block着重于将应用逻辑和界面分开,让应用系统具备更清晰的结构,更强的扩展性.可移植性.在曹严明先生的讲座中,提及到了关于应用CAB开发的几个指导性 ...

  8. input回车触发事件_JavaScript学习笔记(十五)-- Event事件(上)

    EVENT(上) 之前我们简单的了解过一些事件,比如 onclick / onload / onscroll / ... 今天开始,我们详细的学习一些 事件 什么是事件 一个事件由什么东西组成 触发谁 ...

  9. Dojo Toolkit 创始人谈Dojo学习

    Dojo Toolkit 创始人谈Dojo学习 学习Dojo Toolkit时至少要清楚一点--你想要的是什么!在刚开始使用Dojo时,我基本的目标就是创建一个有用的JavaScript工具集而不必让 ...

最新文章

  1. 三级下拉框连动的数据库版
  2. inkscape 无法打开文档属性
  3. grep 显示包含两个关键字_linux三剑客之-grep
  4. jQuery中的渐变动画效果
  5. 对6月份的项目的总结
  6. HC大会,华为联合合作伙伴发布一站式物联网IoT开发工具小熊派BearPi
  7. sencha touch 入门学习资料大全
  8. Python多线程报错之RuntimeError
  9. unity scence灯光不显示_Unity基础教程系列(四)——多场景(Loading Levels)
  10. MySQL中Join算法实现原理通俗易懂
  11. Python中正则匹配使用findall时的注意事项
  12. 复合火焰探测传感器_智能消防水炮能够自动跟踪火焰吗?
  13. Trisk:在 Flink 实现以 task 为中心的流处理动态 Reconfiguration 的 Control Plane
  14. 使用c语言生成斐波拉契(Fibonacci)数列的前20项并输出
  15. 计算机网络网络应用之P2P应用
  16. LBP原理介绍以及算法实现
  17. [Python从零到壹] 五十三.图像增强及运算篇之直方图均衡化处理
  18. html中output标签详细介绍
  19. 数据库期末复习:选择题汇总
  20. SPARC架构下的反汇编(三)——SPARC汇编语言

热门文章

  1. java rmi接口 超时设置_Spring RMI客户端读超时设置 | 学步园
  2. 文件的记录c语言程序,c语言程序学生籍贯信息记录簿设计.docx
  3. eclipse linux远程调试工具,使用本地Eclipse IDE调试器与远程项目源(Linux)
  4. 16字节 oracle md5,Oracle中的MD5加密
  5. neo4j java查找_Spring-Boot使用neo4j-java-driver-- 查找两个节点之间关系的最短路径
  6. 如何将Android Studio卸载的干干净净?
  7. 下载国外网站资料需java_Java开发必知道的国外10大网站
  8. linux 库的头文件安装在,“找不到jpeg的头文件或库文件”在Alpine Linux上安装枕头...
  9. python爬取数据保存为csv时生成编号_将爬取到到数据以CSV格式存储
  10. oracle数据库连接名是什么,连接到Oracle数据库的几种命名方式