Ada*_*sek 7 javascript jquery javascript-events
近日笔者从提升我们项目的jQuery的文件1.4.2来1.4.4,看来,由于1.4.3在路上,我们一直在使用jQuery.data已停止工作.
我们有这个代码:
var events = $(window).data('events');
if (events.scroll)
if (!events.scroll.include(handler))
$(window).scroll(handler);
Run Code Online (Sandbox Code Playgroud)
目的是防止此特定处理程序被多次绑定.
在1.4.2,这工作正常.在1.4.4,events未定义.
function handler() {
//do something
}
$(document).ready(function(){
$(window).scroll(handler);
$('div#test').scroll(handler);
$(window).data('events') -> undefined
$('div#test').data('events') -> Object
});
Run Code Online (Sandbox Code Playgroud)
这个API改变了什么?我该如何列出活动window?
我已将第一行更改为:
var events = $(window).data('__events__').events;
Run Code Online (Sandbox Code Playgroud)
有点凌乱,但将事件连接到普通对象的能力是令人信服的.
Nic*_*ver 10
对于事件类型,jQuery 1.4.3+发生了变化,以避免对象名称冲突,因为window(或任何其他普通对象)使用密钥"__events__",如下所示:
var events = $(window).data('__events__');
Run Code Online (Sandbox Code Playgroud)
相同的__events__键用于任何没有.nodeType属性的对象(window没有属性,所以它在这里被视为普通对象).
要明确这是一个有意识的,有意识的改变,它包含在jQuery 1.4.3发行说明中:
JavaScript对象
对JavaScript对象(或更准确地说,不是DOM节点的任何东西)使用.data()时进行了许多更改.要在JavaScript对象上设置数据时启动,数据将直接设置在对象上 - 而不是进入内部数据对象库.此外,附加到对象的事件将放入__events__实际上是函数的新属性中.这样做是为了允许事件直接附加到对象,在收集对象时进行垃圾收集,而不是由JSON序列化程序序列化.这些更改应该使jQuery的数据和事件系统在JavaScript对象上更加有用.
| 归档时间: |
|
| 查看次数: |
3649 次 |
| 最近记录: |