it-swarm.com.de

Mobile Safari (10.3.1) DateTime-Local Fehler "Geben Sie einen gültigen Wert ein"

Bei den neueren Versionen von iOS Mobile Safari wird eine Fehlermeldung angezeigt. Dieser Fehler trat nicht vor Version 10.3 von iOS auf. Kann mich jemand in die richtige Richtung weisen?

Hier ist der rohe HTML-Code und die angehängte Ansicht sind die inspizierte Ansicht und die Ansicht des Mobilgeräts (iPhone 7).

 Inspector View  iPhone 7 View

8
Mark Tomlin

Einfache Lösung!

Für IOS muss ein Wert in einem Eingabefeld mit dem Typ "datetime-local" festgelegt werden.

Beispiel: <input type="datetime-local" value="2000-07-01T12:00" />

Das ist es :)

Ich persönlich finde es schön, den Standardwert auf die aktuelle Ortszeit des Benutzers einzustellen. Dies muss in ISOTime ohne Sekunden formatiert werden, der Code dafür könnte also etwa so lauten:

// get the iso time string formatted for usage in an input['type="datetime-local"']
var tzoffset = (new Date()).getTimezoneOffset() * 60000; //offset in milliseconds
var localISOTime = (new Date(Date.now() - tzoffset)).toISOString().slice(0,-1);
var localISOTimeWithoutSeconds = localISOTime.slice(0,16);

// select the "datetime-local" input to set the default value on
var dtlInput = document.querySelector('input[type="datetime-local"]');

// set it and forget it ;)
dtlInput.value = localISOTime.slice(0,16);
4
Frank Turano

Diese Nachricht wird durch clientseitige Validierung ausgelöst. Wenn Sie keine clientseitige Validierung verwenden, können Sie dieses Problem beheben, indem Sie es mit dem Attribut novalidate wie folgt deaktivieren:

<form action="/myaction" method="POST" novalidate>
4
Matt

Scheint, es ist ein Fehler in Safari, aber Sie können ihn überspringen, indem Sie Javascript verwenden, um das Formular zu senden.

$("#new_apply_form").submit();
3
Eric Guo

Es ist ein Fehler in Safari. Verwenden Sie stattdessen JS, um das Formular abzusenden.

JS: form.submit();

1
Joshua

Für die, die immer noch mit IOS datetime-local zu kämpfen haben, das gleiche wie ich.

Dies wird verursacht durch IOS Setzen des datetime-local-Werts in ein ungültiges Format, wenn das Wertattribut/die Eigenschaft nicht gesetzt oder mit einem ungültigen Wert gesetzt ist.

<input type='datetime-local' onChange='alert(event.target.value)'>

Dies wird mit dem Format 'yyyy-MM-ddThh: mm: ss' wie 2018-12-25T12: 00: 00 angezeigt, das eine nicht zulässige Sekundenfolge aufweist.

Um dies zu umgehen, stellen Sie einfach den Wert mit einem gültigen Formular ein.

const onChange = (event) => {
    event.target.value = event.target.value.substr(0, 16);
}

Das ist es.

0
NamHoon Jung