Необходимо знать, был ли виджет jQuery UI применен к объекту DOM - PullRequest
23 голосов
/ 01 октября 2009

Я использую jQuery и имею некоторые взаимодействия с пользовательским интерфейсом jQuery, где мне нужно получить параметры. Однако есть вероятность, что функция пользовательского интерфейса jQuery еще не была применена к объекту DOM. Я получаю ошибку JavaScript прямо сейчас, когда я получаю доступ к опции.

У меня есть объект DOM, к которому прикреплен индикатор выполнения (http://docs.jquery.com/UI/Progressbar) (возможно). В другом потоке я пытаюсь получить доступ к опциям, используя domObj.progressbar("option", "value").

Как мне определить, имеет ли domObj прикрепленный progressbar?

Ответы [ 5 ]

24 голосов
/ 17 августа 2010

Вы можете получить доступ к объекту индикатора выполнения на элементе, выполнив:

$("#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());
}
10 голосов
/ 21 января 2013

В соответствии с этим обсуждением рекомендуемый способ определить, был ли виджет представлен на элементе, выглядит следующим образом:

var hasWidget = $('selector').is(':ui-widgetname');
6 голосов
/ 22 октября 2015

Начиная с jQuery UI 1.11, виджеты можно напрямую тестировать с помощью метода instance:

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

Документация: http://api.jqueryui.com/jQuery.widget/#method-instance

4 голосов
/ 01 октября 2009

К объекту DOM добавляется дополнительный класс CSS: "ui-progressbar". Если вы просматриваете источник на http://docs.jquery.com/UI/Progressbar, то вы можете увидеть div с id = progressbar и ничего более, но если вы используете Firebug и щелкните элемент, который вы увидите, добавлено еще несколько классифицированных.

Отредактировано: я думаю, что решение @ jamiebarrow здесь более правильное.

2 голосов
/ 10 февраля 2012

Я предпочитаю использовать hasOwnProperty для любого объекта в JavaScript, так как он каждый раз возвращает логическое значение.

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

Какой ИМХО немного лучше проверки нуля; что, если он переключается на неопределенное значение, что также должно возвращать IMO.

...