正在销毁Selectize.js实例

Destroying Selectize.js instances

本文关键字:js 实例 Selectize      更新时间:2023-09-26

我正在加载一个ajax表单,其中包含我应用.selectize()的输入。我在关闭和重新打开表单时遇到了问题,因为selectize构造函数的实例仍然存在。

当我关闭表单时,有没有办法删除这些实例?通过Selectize.count下DOM中的firebug,我可以在打开和关闭表单时看到这些对象的构建。我如何访问这些实例并销毁它们?

我试过这个:

instance1[0].selectize.destroy();
instance2[0].selectize.destroy();

分配的变量如下:

instance1 = $('#preferences_sport').selectize({
  //custom code
});
instance2 = $('#preferences_sport').selectize({
  //custom code
});

Selectize.count继续增加,我不确定接下来该怎么办。

这里是一个JSFiddle,我在其中展示了构建的对象

所以我明白你现在在说什么了,添加了小提琴。我开始在文档中搜索count属性。我找不到它。所以接下来我搜索了源代码,因为这似乎是一些未记录的东西。我能在源代码中找到的唯一计数是这一行:

eventNS          : '.selectize' + (++Selectize.count),

因此,基本上这就解释了这一点。虽然它对每个调用的元素都会增加,但这并不是运行小部件的当前计数。这是一个内部属性,写这篇文章的人将其用作事件名称空间的GUID。例如,当您调用destroy时,他只能删除该小部件实例特有的事件。

我不会用这个属性告诉你任何事情我认为可以放心地假设您的destroy运行良好。如果你不熟悉事件名称空间,你可以在这里阅读更多信息:

https://api.jquery.com/event.namespace/

如果你搜索它,你可以看到他在整个代码中使用eventNS来附加事件。jQuery在他们的代码中也这样做,比如在他们的事件和数据代码中。它们有一个GUID变量,所以任何在页面上加载多个jQuery实例的人,这些实例都不会互相攻击。

所以我想我现在唯一想问你的是,你从哪里了解到这个计数属性的?如果您刚刚找到它,并认为这意味着这是一个运行实例的计数,请记住始终查看文档。如果你在文档中发现了它,那么请现在把我指给我,这样我就可以看一看,看看它是否验证了我的发现或需要更多的研究。


作为一个额外的提醒,我在你的小提琴上看到了这一点,input是一个自我封闭的标签,也被称为无效元素。

<input type="text" value="Calgary, Edmonton" class="selectize_this"></input>

应该只是:

<input type="text" value="Calgary, Edmonton" class="selectize_this" />

来自规格:

Void元素不能有任何内容(因为没有结束标记,没有内容可以被放置在开始标签和结束标签之间)。

无效元素:区域、基础、br、col、嵌入、hr、img、input、keygen、,链接,元,参数,源,轨道,wbr

Selectize API公开了以下方法:

destroy()

销毁控件并取消绑定事件侦听器,以便可以对其进行垃圾收集。