2009-10-01 5 views
22

Estoy usando jQuery y tengo algunas interacciones con una interfaz de usuario de jQuery donde necesito obtener opciones. Sin embargo, existe la posibilidad de que la función jQuery UI aún no se haya aplicado al objeto DOM. Me aparece un error de JavaScript ahora cuando accedo a una opción.Necesito saber si se ha aplicado un widget de jQuery UI a un objeto DOM

Tengo un objeto DOM que tiene la barra de progreso (http://docs.jquery.com/UI/Progressbar) adjunta (tal vez). En otro hilo, estoy tratando de acceder a las opciones usando domObj.progressbar("option", "value").

¿Cómo puedo saber si ese domObj tiene un progressbar conectado?

Respuesta

3

El objeto DOM recibirá una clase CSS adicional añadida: "ui-progressbar". Si ve el código fuente en http://docs.jquery.com/UI/Progressbar, entonces puede ver un div con id = barra de progreso y nada más, pero si usa Firebug y hace clic en el elemento, puede ver que tiene algunos más agregados.

Editado: Creo que la solución de @ jamiebarrow es la más correcta aquí.

+0

Ok, en mi widget de interfaz de usuario personalizada, voy a añadir una clase para el objeto DOM y verificación para ello. Muchas gracias por la idea – DMCS

23

Puede acceder al objeto barra de progreso en el elemento haciendo:

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

Así que para utilizar este:

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

Creo que esta manera es más elegante que la sugerencia de colinramsay. También es aplicable a otros complementos que almacenan sus 'objetos API' utilizando la función de datos jQuery. Y el uso de la consola Firebug para inspeccionar lo que devuelve $ ("# myid"). Data() es muy útil :) – jamiebarrow

2

Yo prefiero usar hasOwnProperty en cualquier objeto en JavaScript, ya que devuelve un booleano cada vez.

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

Que en mi humilde opinión es un poco mejor que comprobar nulo; ¿Qué pasa si cambia a indefinido, que, también IMO es lo que debería devolver.

+0

Pensándolo bien, en realidad mantendría mi código como está ahora, pero más bien verifico la verdad/false valor de progressBar (así que más bien tiene 'if (! progressBar)'). Tiene sentido para mí pasar un parámetro a 'data()' y recuperar un objeto. Probablemente también podría verificar si el tipo es un objeto, pero no sé, parece mucho buscar algo que esté bastante bien definido ... supongo que depende;) – jamiebarrow

10

Según this discussion, la forma recomendada para detectar si un widget se ha vuelto en un elemento es el siguiente:

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

Lo mismo que Colin dijo en el año 2009 en la respuesta que acepté . Sin embargo, tu código es muy sucinto. – DMCS

Cuestiones relacionadas