正在销毁Selectize.js实例
Destroying Selectize.js instances
我正在加载一个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()
销毁控件并取消绑定事件侦听器,以便可以对其进行垃圾收集。
- 实例创建(JS)
- spine.js在启动时填充模型实例
- Vue.js片段实例
- 如何通过JS在不干扰其标记的情况下更改HTML文档中字符串的所有实例
- wavesurfer.js页面上有多个实例
- 从 Node.js 模块中的缓冲区实例中逐行读取字符串
- 角度 JS 控制器未实例化
- 如何在启动 Web 驱动程序实例之前通过命令行在 conf.js 中传递设备名称
- 挖空.js:等待视图模型实例化完成
- Raphael JS选择路径/对象/节点的特定实例
- 如何销毁heatmap.js实例
- 覆盖不可变.js实例的 getter 逻辑
- 如何删除多维数据集.js实例的一天之后的事件
- 从多个Node.js实例访问同一个setTimeout()实例
- 正在销毁Selectize.js实例
- magento中的多个幻灯片.js实例
- mixin中的prototype.js实例属性
- 包括所有页面上的Vue js实例,即使元素不存在
- 从一个Vue.js实例输出数据到另一个
- 在最新的更新后无法调用hammer js实例