【问题标题】:How can I manually disable a called plugin?如何手动禁用被调用的插件?
【发布时间】:2012-09-17 09:28:56
【问题描述】:

我有一个接近完成的网站,现在正在修复一些小错误。开发页面可以在this page 找到,我在使用一些 jquery 插件时遇到了一点问题。

网站的主要部分是持久的,并使用页面控制器来处理 ajax 导航和插件实例化。不过,我发现,在网站上单击几下后,即离开页面并返回,当再次调用页面函数时,它们会中断并且所有 javascript 都将停止。

我想知道,是否可以清除当前处于活动状态的已定义“活动事件”。在有一条鱼之后,我发现分配一个变量然后给该变量函数,但没有鱼。举个例子,我该如何禁用以下简化:

$('#carousel-awards').infiniteCarousel();
$('#another-test').timelinr();

这是两个 jquery 插件,它们没有内置的“关闭”方法。从本质上讲,我想要一个垃圾收集器,因为一旦用户离开使用上述两个功能的页面,页面 HTML 就会暂时失效。

为了清楚起见,我尝试了以下方法:

1. $('#carousel-awards').unbind('infiniteCarousel');

2: $('#carousel-awards').off('infinitCarousel');

3: $('#carousel-awards').infiniteCarousel = function() { return false; }

4: var test;
   test = $('#carousel-awards').infiniteCarousel();
   test = function(){ return false; }

感谢您抽出宝贵时间阅读我的问题

【问题讨论】:

  • 向我们展示处理前后导航的代码

标签: javascript jquery


【解决方案1】:

这取决于插件。但是,如果它使用 jQuery UI 小部件系统,您很可能可以使用 .infiniteCarousel('destroy').timelinr('destroy') 从元素中删除这些小部件。

【讨论】:

  • 抱歉这么久才回复,最近比较忙。您的回答让我了解了更多关于 jQuery 的内部工作原理和工作原理。谢谢你
【解决方案2】:

我不确定这些插件,但通常在元素上调用.remove() 也会删除附加的处理程序、数据对象等;使它们可作为垃圾收集。

通常插件,尤其是那些将数据存储在其他地方或在不同位置创建 DOM 元素的插件,会提供destroy 选项。如果您没有,a) 不需要它或 b) 插件编码不正确 - 您要么需要深入研究并修复它,要么使用其他插件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    相关资源
    最近更新 更多