Echtzeit-Formularüberprüfung: Subtile Verbesserungen zur Verbesserung der Benutzererfahrung
Kernpunkte:
- JavaScript kann zur Implementierung der Echtzeit-Formformüberprüfung verwendet werden, die Benutzern sofortiges Feedback zur Gültigkeit der Eing?nge bietet, wodurch die Benutzererfahrung verbessert und die Datenintegrit?t aufrechterhalten wird, um sicherzustellen, dass nur gültige Daten übermittelt werden.
- HTML5 -Attribute
pattern
undrequired
k?nnen verwendet werden, um den gültigen Eingangsbereich von Formularelementen zu definieren. Wenn der Browser diese Eigenschaften nicht unterstützt, k?nnen seine Werte als Grundlage für Populatoren für JavaScript -Kompatibilit?t verwendet werden.
Das Attribut -
aria-invalid
kann verwendet werden, um anzuzeigen, ob das Feld ungültig ist. Diese Eigenschaft bietet Informationen zu Barrierefreiheit und kann als CSS -Hook verwendet werden, um ein ungültiges Feld visuell anzuzeigen. - JavaScript -Funktion
instantValidation()
Testen Sie das Feld und führen Sie die tats?chliche überprüfung durch, wodurch das Attributaria-invalid
gesteuert wird, um den Status des Feldes anzuzeigen. Diese Funktion kann an das Ereignisonchange
gebunden werden, um eine Echtzeit-Formularvalidierung bereitzustellen.
HTML5 führt mehrere neue Eigenschaften für die Implementierung der Browser-basierten Formularvalidierung ein. Die Eigenschaft pattern
ist ein regul?rer Ausdruck, der gültige Eingabebereiche für Textbereichselemente und die meisten Eingangstypen definiert. required
Attribut gibt an, ob das Feld erforderlich ist. Für ?ltere Browser, die diese Eigenschaften nicht unterstützen, k?nnen wir ihre Werte als Grundlage für Kompatibilit?tsfüller verwenden. Wir k?nnen sie auch verwenden, um interessantere Verbesserungen zu erzielen-Echtzeit-Formularvalidierung.
Es ist zu beachten, dass Sie die überprüfung nicht überbeanspruchen, um das normale Browserverhalten nicht zu st?ren und Benutzeroperationen zu behindern. Zum Beispiel habe ich einige Formulare gesehen, die ungültige Felder mithilfe der Registerkarte Schlüssel nicht hinterlassen k?nnen. JavaScript wird verwendet (genauer gesagt missbraucht), um den Fokus zu zwingen, in dem Feld zu bleiben, bis es gültig ist. Dies ist für die Benutzererfahrung sehr ungünstig und verst??t direkt gegen die Richtlinien für die Zug?nglichkeit.
In diesem Artikel wird eine weniger invasive Implementierungsmethode eingeführt. Es ist nicht einmal eine vollst?ndige Client -Validierung - es ist nur eine leichte Benutzererfahrungsverst?rkung, die auf zug?ngliche Weise implementiert wird, und als ich das Skript getestet habe, war es fast dasselbe wie die aktuelle native Implementierung von Firefox!
Grundlegendes Konzept
In der neuesten Version von Firefox zeigt das Feld einen roten Rand, wie in der folgenden Abbildung gezeigt:
, wenn das erforderliche Feld leer ist oder sein Wert nicht übereinstimmt:
onchange
Natürlich wird dies nicht sofort passieren. In diesem Fall wird der Grenze für jedes erforderliche Feld standardm??ig angezeigt. Stattdessen werden diese Grenzen erst angezeigt, nachdem Sie mit dem Feld interagieren, was im Grunde genommen (wenn auch nicht genau) ?hnlich dem Ereignis ist.
Daher werden wir onchange
als Triggerereignis verwenden. Alternativ k?nnen wir das Ereignis oninput
verwenden, das so lange abfeuert, wie wir einen beliebigen Wert im Feld eingeben oder einfügen. Dies ist jedoch wirklich zu "sofort", da es beim schnellen Abschluss leicht wiederholt ausgel?st werden kann, was zu einem flackernden Effekt führt, der von einigen Benutzern gelangweilt oder abgelenkt werden kann. Und trotzdem l?st oninput
nicht aus dem Programmiereingang aus, und onchange
wird ausgel?st. M?glicherweise müssen wir Vorg?nge wie Autokaponete von Plugins von Drittanbietern verarbeiten.
Definieren Sie HTML und CSS
Schauen wir uns unsere Implementierung an, beginnend mit dem HTML, das auf:
basiert:<form action="#" method="post"> <fieldset> <legend><strong>Add your comment</strong></legend> <p> <label for="author">Name <abbr title="Required">*</abbr></label> <input aria-required="true" id="author" name="author" pattern="^([- \w\d\u00c0-\u024f]+)$" required="required" size="20" spellcheck="false" title="Your name (no special characters, diacritics are okay)" type="text" value="" > </p> <p> <label for="email">Email <abbr title="Required">*</abbr></label> <input aria-required="true" id="email" name="email" pattern="^(([-\w\d]+)(\.[-\w\d]+)*@([-\w\d]+)(\.[-\w\d]+)*(\.([a-zA-Z]{2,5}|[\d]{1,3})){1,2})$" required="required" size="30" spellcheck="false" title="Your email address" type="email" value="" > </p> <p> <label for="website">Website</label> <input id="website" name="website" pattern="^(http[s]?:\/\/)?([-\w\d]+)(\.[-\w\d]+)*(\.([a-zA-Z]{2,5}|[\d]{1,3})){1,2}(\/([-~%\.\(\)\w\d]*\/*)*(#[-\w\d]+)?)?$" size="30" spellcheck="false" title="Your website address" type="url" value="" > </p> <p> <label for="text">Comment <abbr title="Required">*</abbr></label> <textarea aria-required="true" cols="40" id="text" name="text" required="required" rows="10" spellcheck="true" title="Your comment" ></textarea> </p> </fieldset> <fieldset> <input name="preview" type="submit" value="Preview"> <input name="save" type="submit" value="Submit Comment"> </fieldset> </form>
required
Dieses Beispiel ist ein einfaches Kommentarformular, in dem einige Felder erforderlich sind, einige Felder verifiziert werden und einige Felder beide Bedingungen erfüllen. Felder mit aria-required
Attributen haben auch
Die aria-invalid
aria -Spezifikation definiert auch das Attribut aria-invalid
, mit dem wir angeben, ob das Feld ungültig ist (es gibt kein ?quivalentes Attribut in HTML5). Die
input[aria-invalid="true"], textarea[aria-invalid="true"] { border: 1px solid #f00; box-shadow: 0 0 4px 0 #f00; }
box-shadow
Wir k?nnen nur box-shadow
verwenden, ohne sich um Grenzen zu kümmern.
add JavaScript
Jetzt, da wir statischen Code haben, k?nnen wir Skripte hinzufügen. Erstens brauchen wir eine grundlegende addEvent()
Funktion:
function addEvent(node, type, callback) { if (node.addEventListener) { node.addEventListener(type, function(e) { callback(e, e.target); }, false); } else if (node.attachEvent) { node.attachEvent('on' + type, function(e) { callback(e, e.srcElement); }); } }
Als n?chstes ben?tigen wir eine Funktion, um zu bestimmen, ob ein bestimmtes Feld validiert werden sollte, wodurch nur getestet wird, dass es weder deaktiviert noch schreibgeschützt ist und dass es ein pattern
oder required
Attribut hat:
function shouldBeValidated(field) { return ( !(field.getAttribute("readonly") || field.readonly) && !(field.getAttribute("disabled") || field.disabled) && (field.getAttribute("pattern") || field.getAttribute("required")) ); }Die ersten beiden Bedingungen m?gen ausführlich erscheinen, sind jedoch notwendig, da die Eigenschaften eines Elements
und disabled
ihren Attributzustand nicht unbedingt widerspiegeln. In der Opera gibt es beispielsweise Felder mit hartcodiertem Attribut readonly
noch readonly="readonly"
für ihr readonly
Attribut zurück (das Punktattribut stimmt nur mit dem Status überein, den das Skript durch das Skript festgelegt hat). undefined
function instantValidation(field) { if (shouldBeValidated(field)) { var invalid = (field.getAttribute("required") && !field.value) || (field.getAttribute("pattern") && field.value && !new RegExp(field.getAttribute("pattern")).test(field.value)); if (!invalid && field.getAttribute("aria-invalid")) { field.removeAttribute("aria-invalid"); } else if (invalid && !field.getAttribute("aria-invalid")) { field.setAttribute("aria-invalid", "true"); } } }, wenn das Feld erforderlich ist, aber keinen Wert hat oder es Muster und Wert hat, aber der Wert nicht mit dem Muster übereinstimmt, ist das Feld ungültig.
Da das Muster die Zeichenfolgeform des regul?ren Ausdrucks bereits definiert, müssen wir die Zeichenfolge nur an den
-Konstruktor übergeben, und er erstellt ein regul?res Ausdrucksobjekt, das wir für diesen Wert testen k?nnen. Wir müssen jedoch den Wert vorlegen, um sicherzustellen, dass er nicht leer ist, damit der Regex selbst die leere Zeichenfolge nicht berücksichtigen muss. RegExp
Wenn wir festgestellt haben, ob das Feld ungültig ist In. Sehr einfach! Damit dies funktioniert, müssen wir die überprüfungsfunktion an das Ereignis aria-invalid
binden. Es sollte einfach so sein: onchange
Um dies zu funktionieren, muss das Ereignis
<form action="#" method="post"> <fieldset> <legend><strong>Add your comment</strong></legend> <p> <label for="author">Name <abbr title="Required">*</abbr></label> <input aria-required="true" id="author" name="author" pattern="^([- \w\d\u00c0-\u024f]+)$" required="required" size="20" spellcheck="false" title="Your name (no special characters, diacritics are okay)" type="text" value="" > </p> <p> <label for="email">Email <abbr title="Required">*</abbr></label> <input aria-required="true" id="email" name="email" pattern="^(([-\w\d]+)(\.[-\w\d]+)*@([-\w\d]+)(\.[-\w\d]+)*(\.([a-zA-Z]{2,5}|[\d]{1,3})){1,2})$" required="required" size="30" spellcheck="false" title="Your email address" type="email" value="" > </p> <p> <label for="website">Website</label> <input id="website" name="website" pattern="^(http[s]?:\/\/)?([-\w\d]+)(\.[-\w\d]+)*(\.([a-zA-Z]{2,5}|[\d]{1,3})){1,2}(\/([-~%\.\(\)\w\d]*\/*)*(#[-\w\d]+)?)?$" size="30" spellcheck="false" title="Your website address" type="url" value="" > </p> <p> <label for="text">Comment <abbr title="Required">*</abbr></label> <textarea aria-required="true" cols="40" id="text" name="text" required="required" rows="10" spellcheck="true" title="Your comment" ></textarea> </p> </fieldset> <fieldset> <input name="preview" type="submit" value="Preview"> <input name="save" type="submit" value="Submit Comment"> </fieldset> </form>Ereignis
nicht auf Bubble onchange
. Wir k?nnen diese Browser ignorieren, aber ich denke, es w?re eine Schande, besonders wenn das Problem so einfach zu l?sen ist. Es bedeutet nur, dass der Code etwas komplexer ist - wir müssen eine Sammlung von Eingabe- und Textbereichselementen erhalten, durch sie iterieren und das onchange
Ereignis separat an jedes Feld binden:
onchange
input[aria-invalid="true"], textarea[aria-invalid="true"] { border: 1px solid #f00; box-shadow: 0 0 4px 0 #f00; }
Es ist das-eine einfache und nicht-invasive Echtzeit-Verifizierungsverifizierung, die zug?ngliche und intuitive Tipps bietet, um den Benutzern die Ausführung von Formularen zu unterstützen.
Nachdem dieses Skript implementiert wurde, k?nnen wir in nur wenigen Schritten ein vollst?ndiges Kompatibilit?tsfüllerprogramm absolvieren. Ein solches Skript liegt au?erhalb des Rahmens dieses Artikels. Wenn Sie es jedoch weiterentwickeln m?chten, werden alle grundlegenden Module hier getest und das Bindungsausl?serereignis.Ich muss zugeben, ich bin mir nicht sicher, ob es sich wirklich lohnt! Wenn Sie diese Verbesserung bereits haben (die in IE7 und allen modernen Browsern funktioniert) und überlegen Verwendet sie für die überprüfung vor der Untersuchung.
required
Das obige ist der detaillierte Inhalt vonSofortformularvalidierung mit JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hei?e Themen

Java und JavaScript sind unterschiedliche Programmiersprachen, die jeweils für verschiedene Anwendungsszenarien geeignet sind. Java wird für die Entwicklung gro?er Unternehmen und mobiler Anwendungen verwendet, w?hrend JavaScript haupts?chlich für die Entwicklung von Webseiten verwendet wird.

JavaScriptComents AreseessentialFormaintaining, Lesen und GuidingCodeexexecution.1) einzelne Linecommments Arequickickexplanationen.2) Multi-LindexplainComproxlogicorProvedetailedDocumentation.3) InlinecommentsclarifyspecificPartsosensofCode.BestPracticic

Die folgenden Punkte sollten bei der Verarbeitung von Daten und Zeiten in JavaScript festgestellt werden: 1. Es gibt viele M?glichkeiten, Datumsobjekte zu erstellen. Es wird empfohlen, ISO -Format -Zeichenfolgen zu verwenden, um die Kompatibilit?t sicherzustellen. 2. Die Zeitinformationen erhalten und festlegen k?nnen und setzen Sie Methoden fest, und beachten Sie, dass der Monat mit 0 beginnt. 3. Die manuell formatierende Daten sind Zeichenfolgen erforderlich, und auch Bibliotheken von Drittanbietern k?nnen verwendet werden. 4. Es wird empfohlen, Bibliotheken zu verwenden, die Zeitzonen wie Luxon unterstützen. Das Beherrschen dieser wichtigen Punkte kann h?ufige Fehler effektiv vermeiden.

PlatztagsattheBottomofabogpostorwebpageServeSpracticalPurposesforseo, Usexperience und design.1ithelpswithseobyallowingEnginestoaccessKeyword-relevantTagswithoutClutteringHemainContent.2.

JavaScriptispreferredforwebdevelopment,whileJavaisbetterforlarge-scalebackendsystemsandAndroidapps.1)JavaScriptexcelsincreatinginteractivewebexperienceswithitsdynamicnatureandDOMmanipulation.2)Javaoffersstrongtypingandobject-orientedfeatures,idealfor

JavaScripthassevenfundamentaldatatypes:number,string,boolean,undefined,null,object,andsymbol.1)Numbersuseadouble-precisionformat,usefulforwidevaluerangesbutbecautiouswithfloating-pointarithmetic.2)Stringsareimmutable,useefficientconcatenationmethodsf

Ereigniserfassung und Blase sind zwei Phasen der Ereignisausbreitung in DOM. Die Erfassung erfolgt von der oberen Schicht bis zum Zielelement, und die Blase ist vom Zielelement bis zur oberen Schicht. 1. Die Ereigniserfassung wird implementiert, indem der UseCapture -Parameter von AddEventListener auf true festgelegt wird. 2. Ereignisblase ist das Standardverhalten, Uscapture ist auf false oder weggelassen. 3. Die Ereignisausbreitung kann verwendet werden, um die Ereignisausbreitung zu verhindern. 4. Event Bubbling unterstützt die Ereignisdelegation, um die Effizienz der dynamischen Inhaltsverarbeitung zu verbessern. 5. Capture kann verwendet werden, um Ereignisse im Voraus abzufangen, wie z. B. Protokollierung oder Fehlerverarbeitung. Das Verst?ndnis dieser beiden Phasen hilft dabei, das Timing und die Reaktion von JavaScript auf Benutzeroperationen genau zu steuern.

Java und JavaScript sind verschiedene Programmiersprachen. 1.Java ist eine statisch typisierte und kompilierte Sprache, die für Unternehmensanwendungen und gro?e Systeme geeignet ist. 2. JavaScript ist ein dynamischer Typ und eine interpretierte Sprache, die haupts?chlich für die Webinteraktion und die Front-End-Entwicklung verwendet wird.
