2009-10-01 8 views
22

Używam jQuery i mam pewne interakcje z interfejsem jQuery, w którym muszę uzyskać opcje. Istnieje jednak możliwość, że funkcja interfejsu jQuery nie została jeszcze zastosowana do obiektu DOM. Otrzymuję teraz błąd JavaScript po uzyskaniu dostępu do opcji.Potrzebujesz wiedzieć, czy widget JQuery UI został zastosowany do obiektu DOM

Mam obiekt DOM, który ma pasek postępu (http://docs.jquery.com/UI/Progressbar) dołączony do niego (być może). W innym wątku próbuję uzyskać dostęp do opcji za pomocą domObj.progressbar("option", "value").

Jak ustalić, czy to domObj ma dołączoną progressbar?

Odpowiedz

3

Obiekt DOM otrzyma dodatkową klasę CSS do niej dodaną: "ui-progressbar". Jeśli wyświetlisz Źródło na http://docs.jquery.com/UI/Progressbar, zobaczysz div z id = progressbar i nic więcej, ale jeśli użyjesz Firebug i klikniesz element, który widzisz, ma on kilka więcej sklasyfikowanych dodanych.

Edytowane: Myślę, że rozwiązanie @ jamiebarrow jest bardziej poprawne tutaj.

+0

Ok, na moje zlecenie widget ui, ja po prostu dodać klasę do obiektu dOM i odprawy dla tego. Dzięki za pomysł – DMCS

23

Można uzyskać dostęp do obiektu pasek postępu na elemencie wykonując:

$("#myid").data("progressbar") 

więc korzystać z tego:

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

Myślę, że ten sposób jest bardziej elegancki niż sugestia Colinramsaya. Ma również zastosowanie do innych wtyczek, które przechowują swoje "obiekty API" za pomocą funkcji danych jQuery. I używanie konsoli Firebug do sprawdzenia, co $ ("# myid"). Zwraca dane() jest bardzo użyteczne :) – jamiebarrow

2

wolę używać hasOwnProperty na każdym obiekcie w JavaScript, ponieważ zwraca boolean za każdym razem.

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

Który IMHO jest trochę lepszy niż sprawdzanie wartości null; co jeśli przełączy się na niezdefiniowane, co również oznacza IMO.

+0

Po drugie myślę, że zachowałbym swój kod tak, jak jest teraz, ale raczej sprawdzam prawdę/falsy wartość progressBar (więc raczej 'if (! progressBar)'). Ma sens, żebym przekazał parametr do 'data()' i zwrócił obiekt. Mogłabym też prawdopodobnie sprawdzić, jaki jest obiekt, ale nie wiem, wygląda na to, że sprawdzam coś, co jest całkiem dobrze zdefiniowane ... chyba to zależy;) – jamiebarrow

10

Według this discussion, zalecany sposób, aby wykryć, czy widget zostało wykonane na elemencie jest następujący:

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

To samo powiedział Colin w 2009 roku w odpowiedzi, którą zaakceptowałem . Jednak Twój kod jest bardzo zwięzły. – DMCS

Powiązane problemy