In meinen Formularen möchte ich beispielsweise die neuen HTML5-Formulartypen verwenden <input type="url" />
( weitere Informationen zu den Typen hier ).
Das Problem ist, dass Chrome super hilfreich sein und diese Elemente für mich validieren möchte, außer dass es daran scheiße ist. Wenn die integrierte Validierung fehlschlägt, gibt es keine andere Meldung oder Anzeige als das Element, das den Fokus erhält. Ich fülle URL-Elemente mit vor "http://"
, und meine eigene benutzerdefinierte Validierung behandelt diese Werte nur als leere Zeichenfolgen. Chrome lehnt dies jedoch ab. Wenn ich die Validierungsregeln ändern könnte, würde das auch funktionieren.
Ich weiß, dass ich einfach wieder verwenden kann, type="text"
aber ich möchte die netten Verbesserungen, die diese neuen Typen bieten (z. B. wird automatisch auf ein benutzerdefiniertes Tastaturlayout auf Mobilgeräten umgeschaltet):
Gibt es also eine Möglichkeit, die automatische Validierung auszuschalten oder anzupassen?
quelle
inputmode
Attribut , das - wenn ich verstehe, was ich richtig lese - verwendet werden kann, um anzugeben, welcher Tastaturtyp dem Benutzer angeboten werden soll, wenn er mit dem Feld interagiert, ohne auch Validierungsregeln zu implizieren. Irgendwann in der Zukunft wird die Verwendung desinputmode
Attributs anstelle destype
Attributs wahrscheinlich die richtige Lösung für dieses Problem sein - aber noch nicht.$('[inputmode]').each(function () { this.attr({type: this.attr('inputmode'), novalidate: true}) });
inputmode
wäre. Wenn Sie die Dinge auf Ihre Weise tun, können Sie (zum Beispiel) immer noch keine nicht numerischen Werte lesen, die der Benutzer in ein Eingabefeld vom Typ eingibtnumber
. Versuchen Sie beispielsweise, etwas Nicht-Numerisches in das Textfeld dieser Geige einzugeben und auf die Schaltfläche zu klicken.<input type='number'>
, dass nicht numerische Werte überhaupt nicht akzeptiert werden?Antworten:
Wenn Sie die clientseitige Validierung für ein Formular in HTML5 deaktivieren möchten, fügen Sie dem Formularelement ein novalidate-Attribut hinzu. Ex:
Siehe https://www.w3.org/TR/html5/sec-forms.html#element-attrdef-form-novalidate
quelle
novalidate="novalidate"
undnovalidate=""
ist auch eine gültige Syntax.novalidate="novalidate"
Methode verwendet, wenn Sie dienovalidate => true
im$options
Array von festlegenFormHelper::create()
. Danke Bassim für die zusätzlichen Infos :)Ich habe die Spezifikation gelesen und einige Tests in Chrome durchgeführt. Wenn Sie das "ungültige" Ereignis abfangen und false zurückgeben, scheint dies das Senden von Formularen zu ermöglichen.
Ich benutze jquery mit diesem HTML.
Ich habe dies in keinem anderen Browser getestet.
quelle
invalid
Ereignis abfangen und false zurückgeben, wird das Formular nicht gesendet.Ich wollte nur hinzufügen, dass die Verwendung des Attributs novalidate in Ihrem Formular den Browser nur daran hindert, das Formular zu senden. Der Browser wertet die Daten weiterhin aus und fügt die Pseudoklassen: valid und: invalid hinzu.
Ich habe dies herausgefunden, weil die gültigen und ungültigen Pseudoklassen Teil des von mir verwendeten HTML5-Boilerplate-Stylesheets sind. Ich habe gerade die Einträge in der CSS-Datei entfernt, die sich auf die Pseudoklassen beziehen. Wenn jemand eine andere Lösung findet, lass es mich wissen.
quelle
<form action="" method="" class="" id="" novalidate>
;)Die beste Lösung besteht darin, eine Texteingabe zu verwenden und das Attribut inputmode = "url" hinzuzufügen, um die URL-Tastaturfunktionen bereitzustellen. Zu diesem Zweck wurde die HTML5-Spezifikation entwickelt. Wenn Sie type = "url" beibehalten, erhalten Sie die Syntaxüberprüfung, die nicht in jedem Fall nützlich ist (es ist besser zu überprüfen, ob ein 404-Fehler zurückgegeben wird, als die Syntax, die recht zulässig ist und keine große Hilfe darstellt).
Sie haben auch die Möglichkeit, das Standardmuster mit dem Attribut pattern = "https ?: //.+" zu überschreiben, um beispielsweise freizügiger zu sein.
Das Einfügen des Attributs novalidate in das Formular ist nicht die richtige Antwort auf die gestellte Frage, da dadurch die Validierung für alle Felder im Formular entfernt wird und Sie möglicherweise die Validierung für E-Mail-Felder beibehalten möchten.
Die Verwendung von jQuery zum Deaktivieren der Validierung ist ebenfalls eine schlechte Lösung, da es unbedingt ohne JavaScript funktionieren sollte.
In meinem Fall habe ich vor der URL-Eingabe ein Auswahlelement mit zwei Optionen (http: // oder https: //) eingefügt, da ich nur Websites (und kein FTP: // oder andere Dinge) benötige. Auf diese Weise vermeide ich die Eingabe dieses seltsamen Präfixes (das größte Bedauern von Tim Berners-Lee und möglicherweise die Hauptursache für URL-Syntaxfehler) und verwende eine einfache Texteingabe mit inputmode = "url" mit Platzhaltern (ohne HTTP). Ich verwende jQuery und ein serverseitiges Skript, um die tatsächliche Existenz der Website (Nr. 404) zu überprüfen und das HTTP-Präfix zu entfernen, wenn es eingefügt wird (ich vermeide es, ein Muster wie pattern = "^ ((? Htt).) * $" Zu verwenden. um zu verhindern, dass das Präfix gesetzt wird, weil ich denke, dass es besser ist, freizügiger zu sein)
quelle
Anstatt zu versuchen, die Validierung des Browsers zu beenden, können Sie den
http://
Text als Platzhalter einfügen. Dies ist von der Seite, die Sie verlinkt haben:Es wäre nicht genau das gleiche, da es dem Benutzer nicht diesen "Ausgangspunkt" bieten würde, aber es ist zumindest auf halber Strecke.
quelle
Ich habe in diesem folgenden Selektor eine Lösung für Chrome mit CSS gefunden, ohne das native Überprüfungsformular zu umgehen, was sehr nützlich sein könnte.
Auf diese Weise können Sie auch Ihre Nachricht anpassen ...
Ich habe die Lösung auf dieser Seite: http://trac.webkit.org/wiki/Styling%20Form%20Controls
quelle
Verwenden Sie einfach novalidate in Ihrem Formular.
Prost!!!
quelle
Hier ist die Funktion, die ich verwende, um zu verhindern, dass Chrome und Opera den ungültigen Eingabedialog anzeigen, selbst wenn novalidate verwendet wird.
quelle
Sie können Javascript hinzufügen, um diese abscheulichen Validierungsblasen zu unterdrücken, und Ihre eigenen Validatoren hinzufügen.
quelle
Wenn Sie ein Formular - Element markieren , wie
required=""
dannnovalidate=""
nicht hilft.Eine Möglichkeit, die
required
Validierung zu umgehen, besteht darin , das Element zu deaktivieren .quelle
Sie können eine einfache Chrome-Erweiterung installieren und die Validierung im laufenden Betrieb deaktivieren Https://chrome.google.com/webstore/detail/html5-form-validation-err/dcpagcgkpeflhhampddilklcnjdjlmlb/related
Standardmäßig funktioniert alles als Standard, aber Sie können die HTML5-Validierung mit einem einzigen Klick auf das Erweiterungssymbol in der Symbolleiste deaktivieren
quelle