2010-05-06 30 views

Respuesta

31

Esto podría ser un posible error en el pasado. Ahora bien, esta solución

$("#filter_date").datepicker("widget").is(":visible") 

funciona perfectamente

+1

La primera vez que el marcador de fecha se adjunta a un elemento, es invisible y, sin embargo, visible devuelve verdadero. El elemento aún no tiene el estilo de mostrar ninguno, pero aún está oculto y, desafortunadamente, no se detectó en el código. Aún así, +1. :) – mikong

+2

Ahh, en la primera carga, debe comprobar si está: vacío. – mikong

+0

No funciona para mí. Ambos: empty y: visible siempre devuelven true - antes de la primera vez que se abre el datepicker y siempre después. – AyCabron

4

De la parte superior de mi cabeza, podría pensar en utilizar los beforeShow y onClose eventos definidos para el control selector de fecha para cambiar una clase (o una bandera) en alguna parte, y la comprobación de la presencia de las cuales para determinar si el control selector de fecha es abierto o no.

8

Basta con establecer:

#ui-datepicker-div { display: none; } 

en su archivo CSS y su código:

$("#filter_date").datepicker("widget").is(":visible") 

funcionará correctamente!

1

Acceso atributo y el estilo del selector de fecha compararlo con un estilo cuando se oculta selector de fechas (display: none):

var datePickerStyle = $('.datepicker').attr('style'); 
var noneStyle = 'display: none;'; 
if(datePickerStyle.indexOf(noneStyle) != -1){ 
    console.log('shown'); 
} else { 
    console.log('not shown'); 
} 
+0

Este es realmente bueno cuando necesitas probar si el elemento está visible, y ejecutas pruebas en phantomJS (.is (": visible") no funcionó para mí) –

0
var isCalendarVisible;  
    $(".datepicker).datepicker().on("show", function() { 
      isCalendarVisible = true; 
    }).on("hide", function() { 
      isCalendarVisible = false; 
    }); 

He utilizado este enfoque para la conmutación del selector de fechas en el clic de un botón. isCalendarVisible actualizándose en 'mostrar' & 'ocultar' de datepicker en consecuencia. Verifico el valor de 'isCalendarVisible' para abrirlo o cerrarlo manualmente.

function toggleCalendar() { 
     if (isCalendarVisible) { 
      $(".datepicker .add-on").datepicker("hide"); 
     } else { 
      $(".datepicker .add-on").datepicker("show"); 
     } 
    } 
Cuestiones relacionadas