2009-10-01 74 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

相关问题