2015-12-15 85 views
1

我正在加载一个带有输入的ajax表单,我将它应用于.selectize()。当我关闭并重新打开表单时遇到问题,因为存在Selectize构造函数的实例。销毁Selectize.js实例

当我关闭表单时,是否有办法删除这些实例?通过查看Selectize.count下的DOM中的萤火虫,我可以看到这些对象的建立。我如何访问这些实例并销毁它们?

我已经试过这样:

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

分配中的变量是这样的:

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

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

的Selectize.count继续建立和我不知道在哪里可以从这里走。

这里是一个JSFiddle,我表明建立

+0

你可以创建一个小提琴重复的问题,因为从我可以告诉你通过阅读文档看来你做的是正确的。奇怪的是,我从来没有看到一个jquery插件,它强制你在它所粘贴的对象上调用函数。我会认为它会这样做,以便jquery不是一个要求,但文档说它是。 – AtheistP3ace

+0

@ AtheistP3ace添加了一个JSFiddle,显示随着模式窗口打开和关闭而建立的对象。 – Graeme

回答

1

所以我看到你说的话,现在加入小提琴的对象。我开始通过搜索该数量属性的文档。我找不到它。所以接下来我搜索了源代码,因为它似乎是一些无证的东西。我在源代码中可以找到的唯一计数是:

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" /> 

从规格:

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

空隙元素:面积,碱,BR,山口,嵌入,小时,IMG,输入,密钥生成, 链路,间位PARAM,源,跟踪,WBR

1

的Selectize API并暴露下面方法:

destroy() 

销毁控制和解除绑定事件侦听器,以便它可以被垃圾收集。