要知道,如果一个jQuery UI部件已经被应用到DOM对象(Need to know if a j

2019-08-17 03:26发布

我使用jQuery和有一个jQuery UI,我需要得到选项的一些互动。 不过有该jQuery UI的功能尚未应用到DOM对象的可能性。 我得到一个JavaScript错误,现在,当我访问一个选项。

我有一个具有进度(DOM对象http://docs.jquery.com/UI/Progressbar )连接到它(也许)。 在另一个线程,我想访问使用该选项domObj.progressbar("option", "value")

如何确定如果domObj有一个progressbar连接?

Answer 1:

DOM对象将获得附加了一个额外的CSS类:“UI的进度”。 如果你查看源文件上http://docs.jquery.com/UI/Progressbar然后就可以看到使用id =进度,仅此而已一个div,但如果你使用Firebug并单击该元素,你可以看到它有几个归类添加。

编辑:我认为,@ jamiebarrow的解决方案是在这里更正确的一个。



Answer 2:

你可以通过做访问进度条对象的元素:

$("#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());
}


Answer 3:

根据这一讨论 ,来检测的推荐方法,如果窗口小部件已呈现的元素如下:

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


Answer 4:

在jQuery UI 1.11,窗口小部件可以直接测试用于经由所述instance方法:

var hasProgressbar = ($(element).progressbar("instance") !== undefined);

文档: http://api.jqueryui.com/jQuery.widget/#method-instance



Answer 5:

我更喜欢使用hasOwnProperty在JavaScript中的任何对象,因为它每次都返回一个布尔值。

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

恕我直言,这比检查空好一点; 如果它切换到不确定的,这也海事组织它应该返回什么。



文章来源: Need to know if a jQuery UI Widget has been applied to a DOM object