使用 jquery-ui/datepicker 的内存泄漏

Posted

技术标签:

【中文标题】使用 jquery-ui/datepicker 的内存泄漏【英文标题】:Memory leak using jquery-ui/datepicker 【发布时间】:2011-09-02 20:51:01 【问题描述】:

我正在使用这些脚本(其中 jquery-ui[].custom.js 是 datepicker 插件):

<script src="../../Scripts/jquery-1.5.1.js" type="text/javascript"></script>
<script src="../../Scripts/jquery-ui-1.8.13.custom.js" type="text/javascript"></script>
<script id="formvalidation" type="text/javascript">
$(document).ready(function () 
    $(".datepicker").datepicker( dateFormat: 'dd/mm/yy' );
);
</script>

在这个输入元素上(在表单内):

<input type="text" name="Date" class="datepicker" />

页面加载正常,当我单击输入字段时,日期选择器会正确弹出,但是一旦选择了日期并且日期选择器消失,我就会出现内存泄漏(在每个浏览器中)。由于 jquery-1.5.1.js 中的内存泄漏,这会导致那部分 JS 崩溃或减慢浏览器速度:

行:1520 错误:内存不足

调试时我看到错误行在 2310

jQuery.event.remove( elem, type + types );

一点上下文:

// Unbind all events for the element
if ( !types || typeof types === "string" && types.charAt(0) === "." ) 
    types = types || "";
    for ( type in events ) 
        jQuery.event.remove( elem, type + types );
    
    return;

是我做错了什么还是 jquery 中的错误?我也在使用验证插件,但是当我禁用它时会出现同样的错误。

[解决了吗?] 由于我无法在 8 小时内发布我的答案:

通过切换到 jquery 的最小版本(jquery-1.5.1.min.js 和 jquery-ui-1.8.13.custom.min.js)解决了泄漏。看来最小版本和开发版本之间存在一些差异。

附带问题:如果它还不是问题,哪里是提出这个问题的好地方?

【问题讨论】:

如果你使用 jQuery 1.6,它会消失吗? 不,尝试了 1.4.1、1.5.1 和 1.6.1。 【参考方案1】:

通过切换到 jquery 的最小版本(jquery-1.5.1.min.js 和 jquery-ui-1.8.13.custom.min.js)解决了泄漏。看来最小版本和开发版本之间存在一些差异。

附带问题:如果它还不是问题,哪里是提出这个问题的好地方?

【讨论】:

【参考方案2】:

也许你想要

$(document).ready(function () 
    $(".datepicker").datepicker( dateFormat: 'dd/mm/yy' );
);

您上面的构造会将您的函数作为选择器传递给 jQuery,这可能会产生意想不到的后果。

【讨论】:

很好,但我试过了,没有任何改变。我会将其添加到我的问题中。 您是按照我发布的内容进行更改,还是按照您现在的问题进行更改?它仍然在document.ready 中显示$(function() ... ),这是错误的。那就是问题不在于没有使用document.ready,问题在于将函数传递给jquery。 糟糕,我做错了。我把它换成了你所拥有的,但我仍然得到同样的错误:S. 这很奇怪。能不能制作一个简化版的jsfiddle,这样也可以很方便的尝试不同版本的jquery? 不过似乎没有内存泄漏,至少我可以说。

以上是关于使用 jquery-ui/datepicker 的内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章

使用 jquery-ui datepicker 的 knockoutjs 数据绑定

jquery-ui datepicker 设置开始结束时间选择范围

在 jquery-ui datepicker 中的“今天”按钮上添加事件侦听器

Rails 服务器告诉我 --- 找不到类型为 'application/javascript' 的文件 'jquery-ui/datepicker'

Jquery-ui Datepicker 未显示在 Rails 视图中,出现错误 Uncaught TypeError: $(...).datepicker is not a function

jquery-ui datepicker插件在页面第二次点击时无效的问题