需要知道jQuery UI Widget是否已应用于DOM对象

DMC*_*MCS 23 jquery user-interface jquery-ui widget progress-bar

我正在使用jQuery并与jQuery UI进行一些交互,我需要获取选项.但是,有可能jQuery UI函数尚未应用于DOM对象.当我访问一个选项时,我现在收到一个JavaScript错误.

我有一个DOM对象,它附带了进度条(http://docs.jquery.com/UI/Progressbar)(也许).在另一个线程中,我正在尝试使用 domObj.progressbar("option", "value").

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

jam*_*row 24

您可以通过执行以下操作来访问元素上的进度条对象:

$("#myid").data("progressbar")
Run Code Online (Sandbox Code Playgroud)

所以使用这个:

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());
}
Run Code Online (Sandbox Code Playgroud)


Cyb*_*onk 10

根据此讨论,检测窗口小部件是否已在元素上呈现的推荐方法如下:

var hasWidget = $('selector').is(':ui-widgetname');
Run Code Online (Sandbox Code Playgroud)


jdm*_*hal 7

从jQuery UI 1.11开始,可以通过以下instance方法直接测试小部件:

var hasProgressbar = ($(element).progressbar("instance") !== undefined);
Run Code Online (Sandbox Code Playgroud)

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

  • 这应该是正确的答案,因为它对每个小部件都有效。 (2认同)

Col*_*say 4

DOM 对象将附加一个额外的 CSS 类:“ui-progressbar”。如果您在http://docs.jquery.com/UI/Progressbar上查看源代码,那么您可以看到一个带有 id=progressbar 的 div,仅此而已,但是如果您使用 Firebug 并单击该元素,您可以看到它有更多的类添加。

编辑:我认为@jamiebarrow 的解决方案是更正确的解决方案。