Validarea intrarii utilizatorului unui formular web este importanta pentru securitate si calitatea datelor. In acest articol, Dino Esposito explica modul de validare a unui formular si de a adauga capacitatea de anulare cu Bootstrap 4.
Intr-un articol precedent, am abordat primul pas spre crearea unui cadru minimal, dar eficient de vanilie-JS, pentru tratarea formularelor HTML. Cadrul de proba (numit ybq-formes.js ) s-a bazat pe doar cateva fisiere – un fisier JavaScript si un fisier CSS insotitor. In acest articol, voi face codul cu un pas suplimentar adaugand capacitatea de anulare, validarea campului si postarea Ajax pe server. Oricat de empatic ar parea, nu este foarte diferit de ceea ce obtineti din modulele ad hoc unghiulare si de alte cadre mult mai mari si populare. Pagini de esantion sunt construite folosind ASP.NET Core, dar aceasta nu este deloc o cerinta, deoarece miezul solutiei este format din JavaScript pure si Bootstrap 4 stiluri native.
O scurta recapitulare a articolului precedent este doar pentru a oferi un pic de context. Elementul FORM este decorat cu un stil CSS personalizat, care nu are alt scop in viata decat acela de a face FORMUL usor selectabil prin intermediul codului.
<<strong> form </strong> class = “ybq-form” action = “…” method = “post”>
Fisierul JavaScript legat de pagina gazda va conecta toate elementele de forma decorate cu clasa de potrivire si va efectua unele lucrari la elementele continute.
$ (“. ybq-form”). fiecare (functie () {
…
});
In special, codul va salva intr-un atribut de date-origine nou creat valoarea initiala a fiecarui camp. Valorile originale sunt utilizate pentru a detecta daca forma si-a modificat valorile si, in acest articol, va fi, de asemenea, fundamentul care va permite anularea functionalitatii. In afara de detectarea automata a modificarilor in asteptare si injectarea unei interfete de utilizator ad-hoc pentru a oferi feedback utilizatorilor, codul care vine cu articolul precedent nu a indeplinit alte sarcini semnificative. (Vezi figura.)
Sa adaugam ceva mai multa putere!
Extinderea interfetei cu utilizatorul
Pentru a activa functionalitatea UNDO , aveti nevoie de un buton pentru a face clic, iar cadrul poate crea unul pentru dvs. Majoritatea setarilor grafice sunt codate, dar codul sursa este disponibil pentru a face toate modificarile dorite.
$ (“. ybq-form”). fiecare (functie () {
// Unele coduri existente aici
…
// Adaugati butonul UNDO
})
UNDO Butonul consta dintr -o parte marcaj static de mai jos.
<buton onclick = ‘__ anulare (acest)’ type = ‘buton’
class = ‘btn btn-secundar’>
<i class = ‘fa fa-undo’> </i>
</ Butonul>
In schimb, functia __undo este o noua adaugare la cadru. Iata codul aferent.
functie __undo (elem) {
var forma = $ (elem) .parents (‘forma: prima’);
form.find (“intrare”). fiecare (functie () {
var orig = $ (this) .data (“orig”);
$ (Aceasta) .val (orig);
});
$ (Elem) .blur ();
}
Codul se bucleaza prin campurile de intrare ale formularului, iar pentru fiecare camp, se restabileste valoarea salvata anterior in atributul data-orig. Figura de mai jos arata efectul butonului UNDO creat dinamic .
Dupa cum vedeti in interfata utilizatorului, cadrul JavaScript a adaugat si un buton de trimitere. Face acest lucru, in acelasi timp, adauga butonul UNDO . Poate parea un comportament ciudat ca un cadru sa adauge un buton de trimitere la un formular. Motivul pentru o astfel de alegere este dublu. Unul dintre motive este automatizarea pe cat posibil a tuturor sarcinilor repetitive si a placilor de cazan si, in acelasi timp, realizarea unui design consecvent in toate formele aplicatiei. In al doilea rand, avand o bara de control in partea de sus a formularului va va permite sa infasurati restul formei intr-o zona defilabila de inaltimea dorita. Acest lucru va garanta ca utilizatorii pot parcurge campurile de intrare in timp ce butoanele operationale sunt usor accesibile si vizibile tot timpul. (Vezi figura.)
Pentru ca corpul formei sa poata fi defilat, trebuie sa infasurati lista campurilor de intrare cu un element DIV suplimentar de inaltimea fixa dorita.
<div class = “col-12”
style = “inaltime: 400px; umplutura: 0; overflow-y: auto;”>
<! – Lista campurilor de introducere a formularului ->
</ Div>
Urmatorul pas este gasirea unei modalitati de automatizare a validarii campurilor de intrare.
Validarea campului de intrare
Exista mii de abordari diferite pentru validarea continutului unui camp de intrare inainte si dupa ce este postat pe server. Toate solutiile posibile au argumente pro si contra, nimeni nu este perfect si nimeni nu este cu siguranta in afara locului. In spatiul ASP.NET, unele adnotari de date iubesc pentru a uni, pe cat posibil, experienta de validare pe client si pe server. De asemenea, jquery.validation este destul de popular si Angular are propriile componente. Nu in ultimul rand, JavaScript de vanilie este inca o optiune si, probabil, cea mai flexibila dintre toate si cea mai verbala.
Scopul codului discutat in acest articol este de a mentine fiecare aspect al codului la un nivel minim de complexitate si un nivel bun de abstractizare. Iata o idee de a scrie cat mai putin cod si marcare posibil, acoperind cel putin cele mai comune scenarii de validare.
<input type = “text”
class = “form-control”
id = “nume utilizator” nume = “nume utilizator”
data-rule = “{val} .lungime> 0”
placeholder = “Nume utilizator”
valoare = “Dino” />
De cele mai multe ori, validarea consta in verificarea faptului ca un anumit camp nu este lasat gol, ca valoarea introdusa se incadreaza intr-o gama data de numere sau date si ca textul tipat se potriveste cu anumite tipare, precum numere de telefon, e-mailuri si adrese URL. O alta situatie relativ frecventa este aceea cand doua sau mai multe campuri trebuie sa fie validate impreuna, de exemplu, pentru a se asigura ca locatiile de preluare si declansare ale unei cereri de transport nu se potrivesc sau ca noua parola este repetata corect in cel de-al doilea camp.
Exemplul element INPUT de mai sus prezinta un atribut de regula de date personalizat setat la expresia sirului. Desi este un pic criptic, regula de validare indica faptul ca valoarea campului de utilizator este de asteptat sa nu fie nula. Este de la sine inteles ca regula de date nu este un cod executabil si ca unele biblioteci JavaScript incorporate vor avea grija de asta. In acelasi timp, pentru un dezvoltator, indicarea unei reguli bazate pe text este mult mai rapida decat conectarea unui fisier JavaScript distinct sau popularea unor etichete SCRIPT inline. Atributul regula de date nu se ocupa de scenarii complexe de validare, dar functioneaza bine pentru cazuri simple si cele mai comune. Pe de alta parte, retineti, de asemenea, ca adnotarile de date ASP.NET nu sunt atat de usor de gestionat daca doriti sa faceti validarea in campuri.
Validarea regulilor inline are loc la evenimentul de incetosare, astfel incat utilizatorii sa poata avea feedback imediat in timp ce ies din fiecare camp. Retineti ca aceasta abordare nu va impiedica sa aplicati alte validari generale ale clientului la trimiterea formularului. Efectuarea validarii la evenimentele de estompare individuale mentine, de asemenea, starea de validitate a formularului actualizat constant. Prin urmare, urmatorul pas este utilizarea informatiilor despre starea valida pentru a activa sau dezactiva butonul de trimitere. De ce ar trebui sa incerci vreodata sa postezi un formular care incalca regulile? Aruncati o privire la codul sursa pentru procesarea regulilor de date.
function __attachValidationHandler (intrare) {
var rule = input.data (“regula”);
if (typeof rule! == ‘undefined’ && rule.length> 0) {
input.on ( “blur”,
function () {
var current = __getCurrentValue ($ (this));
cod cod = rule.replace (“{val}”, “‘” +
curent + “‘”);
rezultat var = __eval (cod);
daca (rezultat)
$ (Aceasta) .removeClass ( “este-invalid”);
altfel
$ (Aceasta) .addClass ( “este-invalid”);
});
}
}
Partea anterioara de cod JavaScript ataseaza un gestionar de eveniment onblur la fiecare camp de intrare din formular. Structura codului este usor de realizat. Daca expresia regulii este definita, atunci este creat un handler pentru evenimentul de incetosare care extinde marcatorul {val} al regulii la valoarea curenta a campului de intrare si executa expresia. De exemplu, daca campul de utilizator contine Dino , atunci expresia evaluata de evenimentul de estompare este urmatoarea:
Unele explicatii suplimentare merita functia interna. Dupa cum stiti, JavaScript prezinta functia de evaluare incorporata al carei scop este exact sa ia un sir de text si sa-l trateze ca si cum ar fi un cod executabil. Cu alte cuvinte, daca sirul transmis la eval este format din cod executabil, interpretul poate intelege atunci codul se executa. Aceasta este o problema potentiala de securitate, in special atunci cand codul nu are control asupra sirului care ar putea fi transmis. Codul urmator este un mod mai sigur de a executa cod JavaScript dinamic.
functie __eval (cod) {
returnare Functie („„ utilizati strict ”; return (‘+ cod +’) ‘) ();
}
Urmatoarea problema cu care trebuie sa va confruntati este cum sa anuntati utilizatorii despre rezultatul validarii. In cazul in care validarea a reusit, este posibil sa nu fie necesar sa se afiseze nimic (unele formulare, cu toate acestea, prezinta un marcaj verde frumos de confirmat). Cu siguranta, in schimb, va fi necesara afisarea de feedback daca validarea esueaza. Iata unde Bootstrap 4 face diferenta.
rezultat var = __eval (cod);
daca (rezultat)
$ (Aceasta) .removeClass ( “este-invalid”);
altfel
$ (Aceasta) .addClass ( “este-invalid”);
Prin simpla adaugare a campului de intrare, noul stil nu este invalid (sau este valid), instruiti biblioteca Bootstrap sa marcheze vizual controlul cu un chenar rosu.
film porno cu blonde http://www.russianinterpreting.com/__media__/js/netsoltrademark.php?d=adult66.net/
porno famyli http://fastvalue.com/__media__/js/netsoltrademark.php?d=adult66.net/
porno cu muie http://abcsell.com/__media__/js/netsoltrademark.php?d=adult66.net/
minka porno http://www.gabrielle-gray.com/__media__/js/netsoltrademark.php?d=adult66.net/filme-porno/amatori
porno pervers http://lvc.kismet.com/__media__/js/netsoltrademark.php?d=adult66.net/filme-porno/anal
porno yoga http://www.abigailgrace.net/__media__/js/netsoltrademark.php?d=adult66.net/filme-porno/asiatice
porno hotel http://www.carrecut.com/__media__/js/netsoltrademark.php?d=adult66.net/filme-porno/beeg
filme porno sextube http://old-time-pottery.com/__media__/js/netsoltrademark.php?d=adult66.net/filme-porno/blonde
porno tube mature http://valuebasedcapital.com/__media__/js/netsoltrademark.php?d=adult66.net/filme-porno/brazzers
porno asistente medicale http://zhd.turtlewraps.com/__media__/js/netsoltrademark.php?d=adult66.net/filme-porno/brunete
filme porno fortnite http://qjz.ottollc.com/__media__/js/netsoltrademark.php?d=adult66.net/filme-porno/chaturbate
video porno mothers http://www.automationzone.com/__media__/js/netsoltrademark.php?d=adult66.net/face-sex-anal-cu-prietenul-ei-pentru-prima-oara-cu-prietenul-ei
porno interviu http://www.leasethatplane.com/__media__/js/netsoltrademark.php?d=adult66.net/partida-de-sex-in-masina-cu-un-cuplu-de-amatori-excitati-care-se-filmeaza
porno gatis http://telk.ladderworld.net/__media__/js/netsoltrademark.php?d=adult66.net/minora-frumoasa-e-fututa-intre-tate-chiar-de-fratele-ei-mai-mare
filme porno cu gay tineri http://ohadministration.com/__media__/js/netsoltrademark.php?d=adult66.net/blonda-minora-surprinsa-in-clasa-in-timp-ce-face-sex-cu-profesorul-ei
filme porno brazzer http://www.world-economic-forum.net/__media__/js/netsoltrademark.php?d=adult66.net/studenta-sexy-face-sex-cu-prietenul-ei-in-camera-de-camin-in-timp-ce-e-filmata-pe-ascuns
filme porno cu cai http://www.sdstation.com/__media__/js/netsoltrademark.php?d=adult66.net/scolarita-blonda-e-fututa-in-timp-ce-doarme-de-fratele-mai-mare
alexis texas porno http://www.olympicvideogames.org/__media__/js/netsoltrademark.php?d=adult66.net/doua-lesbiene-fac-sex-in-jacuzzi-si-se-masturbeaza-pana-au-orgasm
free sex porno http://www.pest-management-reporter.net/__media__/js/netsoltrademark.php?d=adult66.net/pustoaica-singura-acasa-e-dezvirginata-de-unchiul-ei-venit-in-vizita
filme porno eva kent http://gunstoreusa.com/__media__/js/netsoltrademark.php?d=adult66.net/doi-studenti-isi-violeaza-colega-beata-chiar-in-camera-de-camin
De asemenea, daca aveti un DIV-ul fratern marcat cu clasa de feedback nevalid, atunci continutul este afisat automat. (Vezi figura.)
<div class = “form-group”>
<label for = “username”> Username </label>
<input type = “text” class = “form-control”
id = “nume utilizator” nume = “nume utilizator”
data-rule = “{val>}. lungime> 0”
placeholder = “User name” value = “Dino”>
<div class = “invalid-feedback”>
Numele este un camp obligatoriu
</ Div>
</ Div>
Pentru a sterge starea vizuala a elementului, este suficient sa eliminati programatic clasa CSS nevalabila. Daca intentionati sa confirmati ca valoarea tastata este acceptabila, puteti, de asemenea, sa aveti un DIV marcat cu stilul CSS cu feedback valid.
Depunerea formularului
Ultimul pas este automatizarea incarcarii formularului in masura in care este posibil. Biblioteca JavaScript care vine cu articolul adauga un buton gratuit de trimitere si ii ofera o clasa CSS standard care faciliteaza ascunderea sau stergerea programatica a acesteia. Butonul nu are niciun gestor de clicuri, dar, fiind un buton de trimitere, declanseaza un eveniment de trimitere la nivel de formular. Biblioteca adauga un handler de trimitere implicit.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
form.on ( “submit”,
function () {
var valid = (form.find (“input.is-invalid”). lungime === 0);
if (! valid) {
returnare falsa;
}
var formData = new FormData (form);
$ .Ajax ({
cache: fals,
url: form.attr (“actiune”),
tip: form.attr (“metoda”),
dataType: “html”,
date: formData,
succes: functie (date) {
(__Eval (successCallback)) (date);
},
eroare: functie (date) {
(__Eval (errorCallback)) (date);
}
});
returnare falsa;
});
Dupa cum vedeti, codul foloseste Ajax si jQuery pentru a posta continutul formularului pe server. Debugarea oricarui cod ASP.NET pe partea serverului functioneaza asa cum era de asteptat si, la sfarsitul zilei, biblioteca va salveaza mult cod de placa cazana. Singura exceptie este comportamentul asteptat odata ce continutul formularului a fost procesat pe server. Acest cod este specific fiecarei forme si poate fi automat automat si generalizat de orice cadru.
<<strong> formular </strong> action = “/ demo / form2” method = “post”
class = “ybq-form”
date-successcallback = “__ successForm”
date-errorcallback = “__ errorForm”>
…
<< strong> / form </ strong >>
Prin adaugarea unui cuplu de atribute ad hoc, puteti limita scrierea acestui cod de manipulare la minimul absolut. Atributul date-successcallback indica numele JavaScript care se va ocupa de succesul trimiterii. Atributul date-errorcallback, in schimb, ia numele functiei de invocat in cazul unui cod de stare diferit de 200. La fel ca in fragmentul de mai sus, functia __eval helper este din nou folosita pentru a transforma un sir simplu intr-un cod JavaScript rulabil. Vizualizarea care defineste formularul poate gestiona operatiunea post formular ca mai jos.
<Script>
function __successForm (date) {
alerta („RESULT IS IS:” + date);
}
</ Script>
<Script>
function __errorForm (date) {
alerta („NU FUNCTIONEAZA”);
}
</ Script>
Functia de apelare de succes primeste valoarea returnata prin metoda controlerului; functia de apelare de eroare, in schimb, ia o valoare care se refera la exceptia aparuta. In cele din urma, daca trebuie sa efectuati o anumita validare in campuri, puteti adauga propriul buton de trimitere si va puteti verifica.
<Script>
$ (“# submitBtn”). faceti clic pe (functia () {
if ($ (“# parola”). val (). lungime <5) {
$ ( “# Parola”) addClass ( “este-invalid”).;
returnare falsa;
}
});
</ Script>
In mod alternativ, daca nu doriti sa aveti un buton suplimentar de trimitere, atunci puteti conecta evenimentul de trimitere a formularului si puteti efectua validarea bazata pe script.
rezumat
Scopul acestui articol si al precedentului privind gestionarea automata a formularelor HTML a fost minimizarea semnificativa a cantitatii de cod care trebuie scris pentru o astfel de sarcina comuna, cum ar fi postarea unui formular. Validarea, detectarea modificarilor, transmiterea si afisarea feedback-ului reprezinta toate sarcinile care pot fi automatizate in mare parte. Angular, de exemplu, face doar asta. Acum aveti un punct de plecare pentru o biblioteca usoara cu vanilie-JS. Sursa completa de formulare ybq poate fi gasita la https://bit.ly/2znGhVP.








