【问题标题】:Recommended way to remove events on destroy with jQuery UI Widget Factory使用 jQuery UI Widget Factory 删除销毁事件的推荐方法
【发布时间】:2012-12-17 01:49:43
【问题描述】:

我正在使用 jQuery UI Widget Factory 来构建一个 jQuery 插件。

我的插件将自定义事件绑定到窗口...

_subscribe: function() {
  $(window).on("dragger.started", function() { ... });
}

我想知道当插件的特定实例被破坏时如何删除这些事件。如果我使用...

destroy: function() {
  $(window).off("dragger.started");
}

...那么这将弄乱页面上插件的任何其他实例,因为它将删除所有“dragger.started”事件。

仅销毁与插件实例关联的事件的推荐方法是什么?

感谢(提前)您的帮助。

【问题讨论】:

    标签: javascript jquery-ui jquery jquery-ui-widget-factory


    【解决方案1】:

    您可以在一个事件中绑定多个命名空间。因此,为您的实例分配一个 id,例如

    //this.id = 'dragger_' + guid_or_static_count
    $(window).on("dragger.started." + this.id, function() { ... });
    

    后来

    $(window).off('dragger.' + this.id);
    

    看到这个fiddle

    【讨论】:

      【解决方案2】:

      你用什么来摆脱实例? jQuery remove() 将删除绑定事件,我相信。

      【讨论】:

      • 感谢您的回复。这是如果我想销毁插件所做的更改,而不从 DOM 中删除原始元素——类似于 jQuery UI 插件的工作方式。例如 $("#myDiv").myPlugin("destroy");
      • 您想重置为原始状态,例如 x/y 坐标或类似的?为此,我认为您需要首先将原始状态保存在某个地方,例如在 JavaScript 变量中,然后只需使用这些设置来设置属性或属性或 css 或您想要重置时更改的任何内容,对?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多