Rolf B: Aktuelles Datum als max in ein datums Eingabefeld

Beitrag lesen

Hallo junger Mann,

dass im max-Attribut das Datum im ISO-Format zu speichern ist, ist Problem 1.

Problem 2 ist die 0, die Du vor den Monat setzt, das musst Du weglassen. Grund: "2019-8-31" wird akzeptiert, "2019-010-31" dagegen nicht.

Problem 3 ist, dass das Setzen von max in onblur nicht dazu führt, dass eine Eingabe jenseits des Tagesdatums abgewiesen wird. Wenn Du das möchtest, muss max bereits vor Betreten des input-Feldes gesetzt sein. Wenn Du es unbedingt mit einem Event tun willst, dann mit onfocus statt mit onblur (das focus Event wird gefeuert, wenn das Eingabefeld den Eingabefokus bekommt)

Der Vorschlag von "ISO-Datum", das Problem im PHP Script am Server zu lösen, ist sicherlich die beste Idee.

Wenn Du es aus $Gründen unbedingt am Client machen musst, dann wäre es besser, sogenanntes unobtrusive script (unaufdringlich) zu verwenden. Notiere im <head> Bereich deiner Seite z.B. so etwas:

<script>
document.addEventListener("DOMContentLoaded", function() {
   let kaufDatum = document.getElementById("kaufDatum");
   if (kaufDatum)
      kaufDatum.max = new Date().toISOString().substring(0,10);
});
</script>

Was ist das?

  • das Script registriert einen Eventhandler für das DOMContentLoaded Event. Dieses Event wird gefeuert, sobald das HTML Dokument interpretiert und in das Objektmodell des Browsers (das DOM) umgewandelt ist. Der Eventhandler ist eine anonyme Funktion, die an addEventListener übergeben wird.
  • In dieser Funktion wird das Element mit der ID kaufDatum gesucht. Wenn es existiert, wird sein max-Attribut gesetzt
  • An Stelle einer handgemachten Aufbereitung wird toISOString() verwendet. Die ersten 10 Stellen davon sind das Datum im Format YYYY-MM-DD. Danach folgt ein T und die Uhrzeit, das brauchen wir nicht, darum wird das Ergebnis von toISOString mittels substr auf die ersten 10 Stellen beschnitten.

Auf diese Weise hast Du kein JavaScript in deinem HTML herumschwirren, sondern eine saubere Trennung.

Falls Du mehr als ein Eingabefeld hast, bei dem max auf das Tagesdatum gesetzt werden muss, kannst Du den gezeigten Code erweitern - darauf würde ich eingehen wenn Du mir sagst, dass Du das brauchst.

Rolf

--
sumpsi - posui - clusi