2009-10-01 16 views
22

Sto utilizzando jQuery e ho alcune interazioni con un'interfaccia utente jQuery in cui ho bisogno di ottenere le opzioni. Tuttavia esiste la possibilità che la funzione dell'interfaccia utente jQuery non sia stata ancora applicata all'oggetto DOM. Ricevo un errore JavaScript adesso quando accedo a un'opzione.È necessario sapere se un oggetto dell'interfaccia utente jQuery è stato applicato a un oggetto DOM

Ho un oggetto DOM a cui è collegata la barra di avanzamento (http://docs.jquery.com/UI/Progressbar) (forse). In un'altra discussione, sto cercando di accedere alle opzioni utilizzando domObj.progressbar("option", "value").

Come determinare se questo domObj ha un progressbar allegato?

risposta

3

All'oggetto DOM verrà aggiunta una classe CSS aggiuntiva: "ui-progressbar". Se visualizzi l'origine su http://docs.jquery.com/UI/Progressbar, puoi vedere un div con id = progressbar e nient'altro, ma se usi Firebug e fai clic sull'elemento, puoi vedere che ha qualche altro aggiunto in classe.

Modificato: Penso che la soluzione di @ jamiebarrow sia la più corretta qui.

+0

Ok, il mio widget personalizzato ui, mi limiterò a aggiungere una classe per l'oggetto Dom e controllo per questo. Grazie mille per l'idea – DMCS

23

È possibile accedere all'oggetto barra di avanzamento sull'elemento facendo:

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

Quindi, per usare questo:

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

Penso che questo modo sia più elegante del suggerimento di colinramsay. È applicabile anche ad altri plugin che memorizzano i loro "oggetti API" utilizzando la funzione di dati jQuery. E usando la console di Firebug per controllare cosa restituisce $ ("# myid"). Data() è molto utile :) – jamiebarrow

2

Io preferisco usare hasOwnProperty su qualsiasi oggetto in JavaScript, dal momento che restituisce un booleano ogni volta.

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

Quale IMHO è leggermente migliore del controllo null; cosa succede se passa a undefined, che, anche IMO è quello che dovrebbe tornare.

+0

Ripensandoci, manterrò il mio codice così com'è ora, ma piuttosto il controllo sulla verità/valore falsy di progressBar (quindi preferiamo 'if (! progressBar)'). Ha senso per me passare in un parametro a 'data()' e recuperare un oggetto. Potrebbe probabilmente anche controllare che sia un oggetto, ma non so, sembra un sacco di controllo per qualcosa che è abbastanza ben definito ... indovina dipende;) – jamiebarrow

10

Secondo this discussion, il modo consigliato per rilevare se un widget è stato reso su un elemento è come segue:

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

La stessa cosa che Colin ha detto nel lontano 2009 nella risposta che ho accettato . Tuttavia, il tuo codice è molto sintetico. – DMCS

Problemi correlati