模块:
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"),obj,"doOnClick2");
如果存在需要进行多个事件的绑定的时候,你就会看到
dojo
的方便之处了
obj2 = { doOnClick2: function(){alert("Clicked!");}}
dojo.event.connect(dojo.byId("inputTest"),"doOnClick2");
dojo.event.connect(dojo.byId("inputTest"),obj2,"doOnClick2");
connect
可以对任何对象的方法进行绑定,而不是只能针对
DOM
对象
dojo.event.connect(obj,"doOnclick2","doOnClick1"); //
在调用
obj.doOnclick2()
后调用
doOnClick1()
dojo.event.connectBefore
dojo.event.connect
@L_616_5@认是后绑定,
connectBefore
则是早绑定,绑定的方法将在指定方法前执行,用法与
connect
一致
dojo.event.connec@R_105_2301@und
Usage Example:
function aroundTest(invocation){
//
此处可以增加代码,比如检查参数
(invocation.args)
var result = invocation.proceed();
//
此处可以增加代码,比如修改结果
(result)
return result;
}
dojo.event.connec@R_105_2301@und(dojo.byId("inputTest"),"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",//
@L_616_5@认为
"after"
,可选
: "before","around"
,注意:
type
是用来决定
adviceFunc
的行为的,如果为
"around"
,则
aroundFunc
将失效
aroundObj: null,
aroundFunc: null,//
如果指定了
aroundFunc
,则其将对
adviceFunc
进行拦截,但是当
type
为
"around"
时,则
aroundFunc
将不会执行
once: false,//
@L_616_5@认为
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","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.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
Usage Example:
dojo.event.browser.preventDefault();
键定义
:
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
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
@L_673_52@//
检测
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
属性的上级元素,@L_616_5@认以
BODY
元素作为参考对象
y//
返回鼠标相对于
css
属性中有
position
属性的上级元素的
y
轴坐标。如果没有
css
属性中有
position
属性的上级元素,@L_616_5@认以
BODY
元素作为参考对象
target//
同
srcElement
currentTarget
layerX//
同
offsetX
layerY//
同
offsetY
pageX//
无水平滚动条的情况下与
clientX
同
pageY//
无水平滚动条的情况下与
clientY
同
relatedTarget//
仅当
type
为
@H_242_39 @mou SEOver,mou SEOut
时才有效
keys//
与
dojo.event.browser.keys
相同,仅当
type
为
keydown,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
|