2010-05-06 6 views

Répondre

31

Cela pourrait être un bug possible dans le passé. Maintenant, cette solution

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

fonctionne parfaitement

+1

La première fois que l'outil datepicker est attaché à un élément, il est invisible et reste visible. L'élément n'a pas encore le style display none mais il est toujours caché, et malheureusement, pas détecté dans votre code. Encore, +1. :) – mikong

+2

Ahh, au premier chargement, vous devriez vérifier si c'est: vide. – mikong

+0

Ne fonctionne pas pour moi. Les deux: vide et: visible renvoie toujours vrai - avant la première fois le datepicker est ouvert et toujours après. – AyCabron

4

Du haut de ma tête, je ne pouvais penser à utiliser les événements beforeShow et onClose définis pour le contrôle de datepicker pour basculer d'une classe (ou un drapeau) quelque part, et de vérifier la présence de déterminer si le contrôle DatePicker est ouvert ou non.

8

: Il suffit de régler

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

dans votre fichier CSS et votre code:

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

fonctionnera correctement!

1

Accès attribut de style de la datepicker et le comparer avec un style quand datepicker est caché (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

Celui-ci est réellement bon quand vous avez besoin de tester si l'élément est visible, et vous exécutez des tests sur phantomJS (.is (": visible") n'a pas fonctionné pour moi) –

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

Je l'ai utilisé cette approche pour faire basculer de datepicker sur un clic d'un bouton. isCalendarVisible mise à jour sur 'show' & 'cacher' de datepicker en conséquence. Je vérifie la valeur de 'isCalendarVisible' pour l'ouvrir ou la fermer manuellement.

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