2011-07-21 25 views
1

可以說我有一個叫做widget的jquery插件,可以在多個元素上使用如何防止jQuery中的一個小部件的多個inits?

$('.myClass').widget();

頁面加載後,我動態添加HTML,其中包含更多的元素,其類別爲myClass。如果我再次運行上面的代碼,以前加載的小部件將會重新初始化。

我想出的一個解決方案是在小部件初始化後刪除類myClass

另一個想法是使用.data()並存儲init標誌檢查插件是否存在。

有沒有更好的方法來做到這一點?

+0

我個人認爲加載HTML動態地使很難將UI和後端乾淨地分開。我更喜歡動態加載數據,並在HTML頁面中保留所有UI及其邏輯(如有必要,包括HTML創建)。這往往可以解決這樣的問題。 – sje397

+0

如果您在下面找到我的答案有幫助,請將其投票並將其標記爲答案。謝謝! –

回答

1

$(".myClass-init").widget().removeClass(".myClass-init")

添加一個名爲myClass-init

新類這意味着您可以繼續使用myClass CSS樣式,並且僅僅使用一個單獨的新類的功能。

您可以使用data-屬性,但這些屬性的選擇器較慢。這是一個問題,你是否認爲data-屬性更語義再額外class

1

我想說的只是增加一個新的類時,它的初始化和使用not選擇排除有類元素。

//Only will work once per element, no matter how many times you run it. 
$('.myClass').not('.initialized').widget().addClass('initialized'); 
1

jQueryUI的Widget框架生成僞選擇,所以如果你的控件被命名爲「進myWidget」你可以用這條線來測試它是否已經被初始化:

$("#element").is(":ui-myWidget") 
相關問題