2015-12-15 194 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() 

銷燬控制和解除綁定事件偵聽器,以便它可以被垃圾收集。