Für die Währung würde ich vorschlagen:
<div><label>Amount $
<input type="number" placeholder="0.00" required name="price" min="0" value="0" step="0.01" title="Currency" pattern="^\d+(?:\.\d{1,2})?$" onblur="
this.parentNode.parentNode.style.backgroundColor=/^\d+(?:\.\d{1,2})?$/.test(this.value)?'inherit':'red'
"></label></div>
Siehe http://jsfiddle.net/vx3axsk5/1/
Die HTML5-Eigenschaften "step", "min" und "pattern" werden beim Senden des Formulars überprüft, nicht bei Unschärfe. Sie brauchen das nicht, step
wenn Sie ein haben, pattern
und Sie brauchen kein, pattern
wenn Sie ein haben step
. Sie können also step="any"
mit meinem Code zurückkehren, da das Muster ihn sowieso validiert.
Wenn Sie onblur validieren möchten, ist es meiner Meinung nach auch hilfreich, dem Benutzer einen visuellen Hinweis zu geben, z. B. den Hintergrund rot zu färben. Wenn der Browser des Benutzers dies nicht unterstützt type="number"
, wird auf zurückgegriffen type="text"
. Wenn der Browser des Benutzers die HTML5-Musterüberprüfung nicht unterstützt, verhindert mein JavaScript-Snippet nicht das Senden des Formulars, gibt jedoch einen visuellen Hinweis. Für Personen mit schlechter HTML5-Unterstützung und Personen, die versuchen, mit deaktiviertem JavaScript in die Datenbank zu hacken oder HTTP-Anforderungen zu fälschen, müssen Sie die Überprüfung auf dem Server trotzdem erneut durchführen. Der Punkt mit der Validierung im Front-End ist für eine bessere Benutzererfahrung. Solange die meisten Ihrer Benutzer eine gute Erfahrung haben, können Sie sich auf HTML5-Funktionen verlassen, vorausgesetzt, der Code funktioniert weiterhin und Sie können ihn im Back-End überprüfen.