我最近升级了我们项目的 jQuery 文件1.4.2
to 1.4.4
看来截至1.4.3
我们一直在使用的方式jQuery.data
已停止工作。
我们有这样的代码:
var events = $(window).data('events');
if (events.scroll)
if (!events.scroll.include(handler))
$(window).scroll(handler);
目的是防止此特定处理程序被多次绑定。
In 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
});
这个 API 发生了什么变化?我应该如何列出事件window
?
我已将第一行更改为:
var events = $(window).data('__events__').events;
看起来有点凌乱,但是将事件连接到普通对象的能力是引人注目的。
jQuery 1.4.3+ 中对事件类型进行了更改,以避免对象名称冲突,例如window
(或任何其他普通对象)使用密钥"__events__"
相反,像这样:
var events = $(window).data('__events__');
相同__events__key 用于任何没有 key 的对象.nodeType财产 (which window
没有,所以这里将其视为普通对象)。
需要明确的是,这是一个有意识的、有意的改变,它包含在jQuery 1.4.3 发行说明:
JavaScript 对象
对 JavaScript 对象(或更准确地说,任何非 DOM 节点)使用 .data() 的时间进行了许多更改。每当您在 JavaScript 对象上设置数据时,数据都会直接在对象上设置,而不是进入内部数据对象存储。另外,附加到对象的事件被放入一个新的__events__
属性实际上是一个函数。这样做是为了允许事件直接附加到对象,在收集对象时进行垃圾收集,而不是由 JSON 序列化程序进行序列化。这些更改应该会使 jQuery 的数据和事件系统在 JavaScript 对象上更加有用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)