Необходимо знать, был ли виджет jQuery UI применен к объекту DOM
Я использую jQuery и имею некоторые взаимодействия с пользовательским интерфейсом jQuery, где мне нужно получить параметры. Однако существует вероятность того, что функция пользовательского интерфейса jQuery еще не была применена к объекту DOM. Я получаю ошибку JavaScript прямо сейчас, когда я обращаюсь к опции.
У меня есть объект DOM, у которого есть индикатор прогресса (http://docs.jquery.com/UI/Progressbar), прикрепленный к нему (возможно). В другом потоке я пытаюсь получить доступ к параметрам с помощью domObj.progressbar("option", "value")
.
Как определить, есть ли в domObj
progressbar
?
Ответы
Ответ 1
Объект DOM получит дополнительный CSS-класс, добавленный к нему: "ui-progressbar". Если вы просматриваете источник на http://docs.jquery.com/UI/Progressbar, вы можете увидеть div с id = progressbar и не более того, но если вы используете Firebug и нажмите элемент, который вы видите, у него есть еще несколько добавленных классов.
Отредактировано: Я думаю, что решение @jamiebarrow является более правильным здесь.
Ответ 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());
}
Ответ 3
В соответствии с этим обсуждением рекомендуемый способ определить, был ли виджет визуализирован в элементе, выглядит следующим образом:
var hasWidget = $('selector').is(':ui-widgetname');
Ответ 4
Как и в jQuery UI 1.11, виджеты могут быть непосредственно протестированы с помощью метода instance
:
var hasProgressbar = ($(element).progressbar("instance") !== undefined);
Документация: http://api.jqueryui.com/jQuery.widget/#method-instance
Ответ 5
Я предпочитаю использовать hasOwnProperty для любого объекта в JavaScript, так как он возвращает логическое значение каждый раз.
var hasWidget = $( "selector-here" ).data().hasOwnProperty( "widget-name-here" );
if ( hasWidget )
{
// Put your awesome code here.
}
Какой ИМХО немного лучше, чем проверка нуля; что, если он переключится на undefined, что тоже ИМО - это то, что он должен вернуть.