jQuery UI Datepicker: nur bestimmte Tage anklickbar
Ich bin gerade bei einem aktuellen Projekt auf die Anforderung gestoßen, dass der jQuery UI Datepicker eingesetzt werden soll und in der Auswahl des Datepickers nur bestimmte Tage, Mittwochs und Samstags, ausgewählt werden können.
Der Vorteil, die Tage, die gar nicht gültig im Sinne der Anwendung sind, auszublenden bzw. zu deaktivieren liegt klar auf der Hand: Der Benutzer erkennt sofort welche Tage er auswählen kann und muss sich nicht die richtigen Werte heraus suchen.
Genau für diesen Anwendungsfall bietet der Datepicker schon ein vordefiniertes Event, beforeShowDay. Das nachfolgende Snippet zeigt die Umsetzung des Ausgangsszenario, nur Mittwoch und Samstag anklickbar zu gestalten.
$("#date").datepicker({
beforeShowDay: function(date){
if(date.getDay()==3 || date.getDay()==6){
return [true,""];
} else {
return [false,""];
}
}
});
Das Event beforeShowDay ruft für jeden Tag des aktuell anzuzeigenden Monats die Funktion auf, die direkt dem Event zugewiesen wurde. Der Funktion wird der Parameter date übergeben. Der Parameter ist ein Date-Objekt und hat daher die Methode getDay(), die eine Zahl für den jeweiligen Wochentag zurückliefert. Die 0 entspricht Sonntag und die 6 entspricht Samstag. Jetzt muss nur noch überprüft werden, ob der aktuelle Tag ein Mittwoch (3) oder ein Samstag (6) ist. Sobald diese Bedingung zutrifft, wird True zurückgeliefert, andernfalls False. Der Rückgabewert dieser Funktion ist ein Array, daher wird der True/False-Wert in einem Array zurückgegeben.
Dass Benutzer nur bestimmte Tage anklicken können, erhöht in meinen Augen die Benutzerfreundlichkeit. Es ist zwar nicht die große Funktion, aber Benutzerfreundlichkeit kennzeichnet sich oft durch die vielen kleinen, netten Funktionen aus
.

Hey @all,
ist schonmal Klasse das es eine deutsche Seite gibt die sich mit jQuery-Code befasst. Nicht das ich dem Englischen nicht mächtig wäre, aber man ist doch näher an der deutschen Sprache.
Ich würde gerne wissen wollen wie Ihr es bewerkstelligen würdet den Datepicker mehrfach in ein Formular einzubinden? Heißt ich habe nicht eine Datumsabfrage, sondern zum Beispiel 20 Datumsfelder mit dem Datepicker.
Greetz
Alex
Hey Alex,
probiere es einfach mal mit einer Klasse anstatt einer ID:
$(“#date”).datepicker(); –> $(“.datepicker”).datepicker();
Viele Grüße,
Dennis
Hallo, bin beim googlen über diese Seite gestolpert und finde dieses Snippet super nur – wo muss das hin kopiert werden?
Hab´s in der jquery.ui.datepicker.js und im Head der Seite probiert – funzt aber nicht
Greets
Extra300Pilot
Hey Extra300Pilot,
das Skript muss natürlich innerhalb eines SCRIPT-Tags sein und innerhalb der Jquery-Funktion:
<script type=”text/javascript”>
$(document).ready(function() {QUELLCODE HIER }
</script>
und das Ganze sollte entweder im HEAD-Tag oder in einer ausgelagerten JS-Datei stehen.
Viele Grüße,
Dennis
Ahaa, vorhin wurde mir der Text nicht vollständig angezeigt
Perfekt – ich werd´s mal probieren.
Thanx …
Hallo Dennis,
danke für den Tipp, es funktioniert perfekt. Ich habe noch ein anderes Problem, vielleicht kannst Du mir ja helfen.
Ich habe die Funktion verwendet und so umgestellt, das keine Sonntage auswählbar sind und habe den minDate auf newDate() gesetzt. nun möchte ich noch das der minDate auf den nächsten Tag gesetzt wird wenn die Uhrzeit aktuell später als 15:30 Uhr ist. Kannst Du mir vielleicht helfen? Mein Ansatz ist:
startdate = new Date(); if (startdate.getHours() > 15) { startdate = startdate.setDate(startdate + 1);
Wie bring ich das denn zusätzlich in beforeShowDay eingebunden?
Es wäre echt toll, wenn du mir helfen könntest.
Hey Ninni,
der Ansatz schaut doch schon ganz gut aus. Du solltest das Script vielleicht beim Initialisieren des Datepickers einbauen. Das ganze sollte dann in etwa so aussehen:
startdate = new Date(); if (startdate.getHours() > 15) { startdate = startdate.setDate(startdate + 1);}
$("#datepicker").datepicker({ minDate: startdate });
Du kannst das Startdatum natürlich auch dynamisch setzen, wenn du folgende Variante verwendest:
$( "#datepicker").datepicker( "option", "minDate", startdate );
In die beforeShowDay-Methode würde ich es nicht einbauen.
Viele Grüße,
Dennis
Hallo, super Tutorial vielen Dank.
Gibt es auch eine Möglichkeit, dass z.B. nur Samstage in geraden Wochen auswählbar sind (jeder 2. Samstag)?
Liebe Grüsse
Hallo,
möglich ist, allerdings musst du dir eine extra Funktion zur Berechnung der Kalenderwoche schreiben/kopieren. Dann könntest mit einer Modulo-Berechnung herausfinden, ob es eine gerade Woche ist. Der Samstag lässt sich mit getDay() herausfinden.
Viele Grüße