41-讨论
14.8.4 讨论
每个jQuery UI事件接受两个参数 event 和 ui 。 event 参数类似于传递给所有浏览器事件(如 click 和 keypress )的事件参数。不同之处在于,这是一个自定义事件对象。和浏览器事件一样,事件的类型可以在 evnet.type 中找到。
许多jQuery UI插件事件通常会被对应的浏览器事件触发。例如,可拖动序列事件 dragstart 、 drag 、 dragstop 很有可能被浏览器的 mousedown 、 mousemove 和 mouseup 事件触发。如果自定义事件被浏览器事件触发,浏览器事件将保存在 event.originalEvent 属性中。如果需要确定操作是通过键盘、鼠标还是以编程方式进行的,这个属性就很有用。如果需要找出鼠标单击或者移动时是否按下了功能键,该属性也能派上用场。
ui 参数是一个散列,包含了这时特别适用于事件的值,以及调用 option 或者其他插件方法无法得到的值。例如,当在可放置元素上放下一个可拖动元素时,把可拖动元素传递给 ui.draggable 中的drop事件。这个 ui 散列的内容对于每个插件事件来说都是独特的。
注意,事件名称和事件类型往往不同。例如,可拖动元素(Draggable)和滑块(Slider)都有 start 事件,这是事件名称,而它们的事件类型分别是 dragstart 和 sliderstart 。因为每个插件都有自己的选项命名空间,所以它们都可以拥有相同的选项名 start :
$('img').draggable({
start: function(event, ui) {
//event.type == 'dragstart'
}
});
$('#mySlider').slider({
start: function(event, ui) {
//event.type == 'slidestart'
}
});
但是,因为事件在同一个命名空间中绑定和触发,所以需要一个前缀,以保持事件类型唯一:
$('img').bind('dragstart', function(event, ui) {
//event.type == 'dragstart'
}
});
$('#mySlider').bind('slidestart', function(event, ui) {
//event.type == 'slidestart'
}
});
这个前缀通常就是插件的名称,所以事件类型为 dialogfocus 、 tabsadd 和 progressbarchange 等。在某些情况下,如果某个自定义动词前缀更合适,则用它代替。所以,用 dragstart 代替 draggablestart , 用 slidestart 代替 sliderstart 。
如果事件类型前缀恰好与事件名称完全相同,为了避免 dragdrag 或 slideslide 这样的重叠,前缀会去掉。在这些情况下,事件类型将与事件名称相同,如 drag 和 slide 。