2009-10-01 108 views
22

我正在使用jQuery並與jQuery UI進行一些交互,我需要獲取選項。但是,jQuery UI函數還沒有應用到DOM對象中。當我訪問一個選項時,我現在收到一個JavaScript錯誤。需要知道jQuery UI Widget是否已應用於DOM對象

我有一個DOM對象的進度條(http://docs.jquery.com/UI/Progressbar)附加到它(也許)。在另一個線程中,我試圖使用domObj.progressbar("option", "value")訪問選項。

如何確定domObj是否附有progressbar

回答

3

DOM對象會得到一個附加的CSS類:「ui-progressbar」。如果你在http://docs.jquery.com/UI/Progressbar上查看源代碼,那麼你可以看到一個id爲progressbar的div,但是如果你使用Firebug並點擊這個元素,你可以看到它已經添加了幾個分類。

編輯:我認爲@ jamiebarrow的解決方案是更正確的解決方案。

+0

好吧,在我的自定義UI控件,我就添加一個類DOM對象和檢查爲了它。感謝一堆想法 – DMCS 2009-10-01 17:48:25

23

您可以通過做訪問元素上的進度條對象:

$("#myid").data("progressbar") 

所以使用這個:

var progressBar = $("#myid").data("progressbar"); 
if (progressBar == null) { 
    // handle case when no progressbar is setup for my selector 
} else { 
    alert("The value is: " + progressBar.value()); 
} 
+1

我認爲這種方式比colinramsay的建議更優雅。它也適用於使用jQuery數據函數存儲其'API對象'的其他插件。使用Firebug控制檯檢查$(「#myid」)。data()返回的內容是非常有用的:) – jamiebarrow 2010-08-17 14:24:21

2

我更喜歡使用hasOwnProperty在JavaScript中的任何對象,因爲它返回每次都有一個布爾值。

var hasWidget = $("selector-here").data().hasOwnProperty("widget-name-here"); 
if (hasWidget) 
{ 
    // Put your awesome code here. 
} 

哪個恕我直言比檢查空白好一點;如果它切換到未定義狀態,那麼IMO也應該返回。

+0

第二個想法是,我實際上保持我的代碼是現在的樣子,而不是檢查truthy/falsy value的progressBar(而不是'if(!progressBar)')。對我來說,我傳遞一個參數給'data()'並取回一個對象是有道理的。也許可能也檢查它的類型是一個對象,但我不知道,似乎很多檢查的東西,這是很好的定義...猜測它取決於;) – jamiebarrow 2013-04-06 08:31:46

10

根據this discussion,以檢測所述建議的方式,如果一個部件已經呈現的元件上,如下所示:

var hasWidget = $('selector').is(':ui-widgetname'); 
+0

科林說回來在2009年的答案我接受。但是,您的代碼非常簡潔。 – DMCS 2013-03-01 21:54:14

相關問題