2010-05-06 27 views
18

Ich habe ein Feld mit einem Datepicker. Ich möchte wissen, ob es offen ist. Ich habe versucht mit:Prüfen, ob der Datepicker geöffnet ist

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

aber es gibt immer wahr.

Wie kann ich überprüfen, ob es geöffnet ist?

Antwort

31

Dies könnte ein möglicher Fehler in der Vergangenheit sein. Nun ist diese Lösung

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

funktioniert perfekt

+1

Wenn der Datepicker zum ersten Mal an ein Element angehängt wird, ist er unsichtbar und dennoch sichtbar wahr. Das Element hat noch keine Anzeige, aber es ist immer noch versteckt, und leider nicht in Ihrem Code erkannt. Immer noch +1. :) – mikong

+2

Ahh, beim ersten Laden sollten Sie prüfen, ob es leer ist. – mikong

+0

Funktioniert nicht für mich. Beide: leer und: visible gibt immer wahr zurück - vor dem ersten Öffnen des Datumsspeichers und immer danach. – AyCabron

4

Aus der Spitze von meinem Kopf, ich die beforeShow und onClose Ereignisse der Verwendung definiert für die Datepicker Kontrolle denken konnte eine Klasse (oder einer Flagge) irgendwo, und die Überprüfung der Anwesenheit von denen zu wechseln, um zu bestimmen, ob die Datepicker Kontrolle offen oder nicht.

8

Einfach gesetzt:

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

in Ihrem CSS-Datei und Ihr Code:

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

korrekt funktionieren!

1

Zugang der Stil-Attribut des Datepicker und vergleichen Sie es mit einem Stil, wenn Datepicker versteckt ist (display: none): auf Klick für Hin- und Herschalten von picker

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

Dieser ist wirklich gut, wenn Sie testen müssen, ob das Element sichtbar ist, und Sie Tests auf phantomJS ausführen (.is (": visible") hat nicht für mich funktioniert) –

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

ich diesen Ansatz von a verwendet haben Taste. isCalendarVisible immer auf 'show' & 'hide' von datepicker entsprechend aktualisiert. Ich überprüfe den Wert von 'isCalendarVisible', um es manuell zu öffnen oder zu schließen.

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