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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549913.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序员应该读的书

第1名:1306票《Code Complete (2nd Ed) by Steve McConnell》中文版《代码大全(第二版)》 第2名:1161票 《The Pragmatic Programmer》,中文版《程序员修炼之道》 第3名:689票 《Structure and Interpretat…

linux系统启动自动启动,linux系统下的自动启动

原理:Linux开机启动的时候会执行目录/etc/init.d目录下的文件,就是系统配置的服务,所以就要把weblogic配置为系统的一个服务,开机时启动。具体步骤:1、创建weblogic文件。在目录/etc/init.d/weblogic命令是&#xff1a…

古墓:黑夜中不断的断龙石敲击声

古墓:黑夜中不断的断龙石敲击声 大概在2000年发于原水木清华BBS,当时二十左右,看武侠,看哲学,看维特根斯坦。这个主要写心中的疑惑。1 唐诗一首—— 纱窗日落渐黄昏 金屋无人见泪痕 寂寞空庭春欲晚 梨花满…

计算三角形的面积

计算三角形的面积 简介:今天比较郁闷,计算平均曲率流使图形光顺的时候,没有成功。(.) 向量求面积 百度百科链接中的9根据向量求面积 double vfarea(MyMesh& mesh, MyMesh::VertexHandle vh) {typedef typename MyM…

linux coreutils升级,Coreutils

Coreutils提供了配置工具,定义颜色代码更加方便;Coreutils包含的不仅仅是ls,同时作为Linux用户,我更习惯于使用GNU的各种shell工具。其实就是安装了Coreutils,就可以使用Linux下的程序,【ls/mkdir/mv】等等…

IDEA插件:search with bing、search with baidu

//转载请注明出处:https://www.cnblogs.com/nreg/p/11267169.html 当项目出现错误时,经常需要复制错误信息粘贴到浏览器查询,但是手动复制再粘贴太麻烦了, 因此IDEA官方给了右键菜单search with google, 感觉上方便了许多&#xf…

linux2.6 gcc 4.8.2,在Red Hat Enterprise linux 6.5上安装GCC 4.8.2

我是Red Hat Enterprise linux的新手.我在Red Hat Enterprise Linux 6.5上编译gcc 4.8.2时面临问题;我从GNU webite中获取源代码.我按照这个链接中的步骤http://gcc.gnu.org/wiki/InstallingGCC发出的命令是:tar xzf gcc-4.6.2.tar.gzcd gcc-4.6.2./contrib/download_prerequis…

oracle 游标(学校)

这段时间实在是很忙,结婚、赶项目进度、被迫出书、教学。每件事都是不能得罪的。。。。前几天帮教务处修正oracle数据库数据问题,把代码贴出来防止以后找不到了 declareCURSORcurTTT isselectXN,XM,XQ,KCMC,XF,BJMC fromCJB;XN1 VARCHAR2(10);XM1 VARCHA…

残差

残差 残差在数理统计中是指实际观察值与估计值(拟合值)之间的差。 参考链接 百度百科 转载于:https://www.cnblogs.com/eat-too-much/p/11267651.html

linux arm ffmpeg configure文件,ffmpeg库的交叉编译记录

系统信息:UbuntuRelease 10.04主机编译器版本:liweiliwei:~$gcc -vUsingbuilt-in specs.Target:i486-linux-gnu… … … …gccversion 4.4.3 (Ubuntu 4.4.3-4ubuntu5)交叉编译器版本:liweiliwei:~$arm-linux-gcc -vUsingbuilt-in specs.Targe…

[原创]公布读取瑞星注册码的小程序源代码

大概一年多了,瑞星一直都没更改其序列号保存方式。这还是偶在学校时无聊研究的。偶是菜鸟,就不多说了。 关键代码如下: 1stringrisingpath;2inti, j 0; longsnoffset, idoffset;34//以下读取5//HKEY_LOCAL_MACHINE\SOFTWARE\rising\Rav,并存在…

红帽linux5.5序列号,Redhat 5 安装序列号及版本说明

在不久前发布的开源虚拟化战略和路线图中,红帽宣称将在未来的3至18个月内,提供四种虚拟化技术和产品,包括:红帽企业Linux、红帽企业虚拟化 Hypervisor、红帽企业服务器虚拟化管理、红帽企业桌面虚拟化管理.今天,他们公布了最新版Red Hat Enterprise Linux, RHEL 5.4.它支持广泛…

Linux常用备份恢复工具

[url]http://os.51cto.com/art/200611/34464.htm[/url]转载于:https://blog.51cto.com/cicizz/9272

Selenium 2自动化测试实战4(引用模块)

一、模组1.模组也叫类库或模块,引用模块 在python中,通过import….或from….import….的方式引用模块,下面引用time模块 import time print (time.ctime())#输出结果为“Tue Jul 30 11:34:32 2019”在time模块下面有一个ctime()方法用于获得当…

linux每隔多久调度y,Linux 进程调度+Linux系统一般执行过程 笔记

进程的调度时机与进程的切换操作系统原理中介绍了大量进程调度算法,这些算法从实现的角度看仅仅是从运行队列中选择一个新进程,选择的过程中运用了不同的策略而已。对于理解操作系统的工作机制,反而是进程的调度时机与进程的切换机制更为关键…

知识关联的价值还无法与人的关联的价值相比

在google的可怕之处一文中得到weidagang2046的指点,顿时惊出一身冷汗。 只研究计算机如何理解人是不够的,实际上,在人和计算机共存的系统中,有四方面的关系要研究: 人->机,机->…

稍微写一个ajax json解析的东西。如果前后端分离。

要形成前后端彻底分离&#xff0c;还是需要ajax 相互传递json&#xff0c;来保持数据的交互。所以写一个ajax 解析来来做记录。 <script>     //只要刷新页面就会直接获取到需要的json$(document).ready(function() {$.ajax({url:"/helloBody",type:"…

appsan可以扫描linux吗,[经验]使用appscan实现多站扫描简单自动化

随着年龄增长&#xff0c;身上负担的压力也越来越大。在工作中很多时候都会需要短时间内扫描多个网站&#xff0c;可能是平时时间不够&#xff0c;或者是客户特别要求&#xff0c;很多时候工作中的扫描工作要放在晚上睡觉时间来做。但是白天忙了一天&#xff0c;晚上不可能一直…

转发程序无法决定链接类型

最近&#xff0c;在客户电脑上看到很多的错误提示&#xff0c;上面写着“转发程序无法决定链接类型”的错误提示。经过查阅资料或可知&#xff0c;这很可能是因为本机有网络驱动器的原因(正好我给他们都安装了网络驱动器&#xff09;。微软网站说是因为当 TCP/IP 上的 NetBIOS …

运用PreviousPage简化提交流程

运用PreviousPage简化提交流程 若是一个page1.aspx向page2.aspx提交的流程&#xff0c;则在page2.aspx的顶部添加如下声明&#xff1a;<% PreviousPageType VirtualPath"~/page1.aspx" %>设置page1.aspx的PostbackUrl属性为~/page2.aspx。假设page1.aspx的code…