jquery vormi valideerimine. Miks ma pean kontrollima vormi täitmist? Kuidas me jquery valideerimist rakendame

rõõmsad vuntsid 7. mai 2017, kell 02:32 Tühjade vormiväljade kontrollimine: universaalne meetod
  • HTML,
  • JavaScript

Need, kes veebilehti loovad, seisavad ühel hetkel silmitsi vajadusega kontrollida, kas kasutaja on saidile postitatud vormi väljad täitnud. Selleks luuakse mingisugune tühjade väljade kontrollimise võimalus, mida oma projektides kasutatakse. Kuid iga juhtumi puhul võib kontrollitavate väljade arv olla erinev. See toob kaasa asjaolu, et loodud kontrollimisvõimalust tuleb konkreetsetest tingimustest sõltuvalt muuta ja tulevikus on meil seda mitu modifikatsiooni.

Lisaks saab saidi ühele lehele paigutada mitu vormi, millest igaühel on erinevad kogused nõutud väljad. Selle tulemusena sisaldab kood mitut samade funktsioonidega plokki, kuid erinevad tingimused, mis ei ole alati õige otsus.

Oma praktikas pidin ka kasutama erinevad variandid vormiväljade täitmise kontrollimine sõltuvalt konkreetsetest tingimustest. Ja fail *.js sisaldas mitmeid funktsioone erinevate vormide kontrollimiseks, mis suurendas koodi hulka ja halvendas selle tajumist.


Mingil hetkel otsustati versioon kirjutada universaalne meetod tühjade väljade kontrollimine, mida saab kasutada mis tahes vormi jaoks, millel on suvaline arv kohustuslikke välju. Vajalikud tingimused Selle meetodi määras lihtsus ja mahukate struktuuride puudumine. Selle tulemusena leiti meetod, mis rahuldas mind täielikult nii oma lihtsuse kui ka mitmekülgsusega.


Selle meetodi olemus:

  • Kohustuslike väljade html-märgistuses lisatakse andmeatribuut, mis on kohustuslik marker.
  • Valideerimine toimub ainult nende väljade puhul, millel on see atribuut.
  • Võimalus laiendada funktsiooni väärtust kontrollides, kasutaja määratud põllul.
  • Vormi märgistuse näide:


    Vormi pealkiri #1 Nõutav Nõutav Nõutav Nõutav

    Välja valideerimiskoodi näide:


    $(".js-form-validate").submit(function () ( var vorm = $(this); vari field = ; form.find("sisend").each(function () ( field.push(" input"); var väärtus = $(this).val(), line = $(this).closest(".some-form__line"); for(var i=0;i


    Meetod, mida kasutasime funktsiooni kutsumiseks sündmuse onsubmit kaudu, nõuab funktsiooni tulemusel ühe loogilistest väärtustest tagastamist: tõene või väär. Ja olenevalt sellest väärtusest vorm kas esitatakse või mitte.

    Nüüd proovime kirjutada selle konkreetse vormiga seotud kinnitusfunktsiooni. Nagu mäletate, on meil vaja täita ainult kaks välja: külastaja nimi ja tema nimi e-posti aadress. Kõige lihtsam on kontrollida iga nõutava välja sisu teksti puudumise suhtes:


    < script language = "javascript" >


    Nagu näete, koosneb kontrollifunktsioon kahest identsest plokist, mis erinevad ainult kontrollitava välja nime poolest. Kommenteerime nende plokkide iga rida:

    Esmalt kontrollime, et see väli oleks tühi. Ja kui see nii on, siis
    kuvage sisseehitatud seadme abil veateade hoiatusfunktsioonid(). Pärast seda, kui kasutaja akna sulgeb, me
    Kasutame fokus() meetodit ja liigutame kursori vigasele väljale. Ja lõpuks
    Väljume funktsioonist, määrates edu lipu väärtuseks false.
    Kui kontrollitav väli ei olnud tühi, jäetakse vastav plokk lihtsalt vahele. Kui kõik kontrollplokid vahele jäetakse, tagastab funktsioon tõene, mis näitab edukat kontrolli.

    Universaalne kinnitusfunktsioon

    Kui meil on vaja kontrollida ainult kahte või kolme välja, siis saame selle "ükshaaval" kontrollimise meetodiga siiski leppida, aga mis siis, kui neid on mitukümmend? Kuid see pole haruldane – eriti keeruliste küsimustike puhul. Seetõttu muudame oma funktsiooni veidi, et see ei sõltuks kontrollitavate väljade arvust.

    Kõigepealt loome massiivi, kus loetleme kõigi kontrollimist vajavate väljade nimed:

    Nõutav = new array("nimi", "e-post");

    See lähenemisviis võimaldab meil väga lihtsalt lisada ja muuta kohustuslike väljade loendit ilma funktsiooni enda koodi otseselt muutmata.

    Lisaks ülalkirjeldatud massiivile lisame veel ühe, mis sisaldab konkreetse välja veateksti:

    Required_show = new array("Teie nimi", "e-post");

    See võimaldab meil vigade teksti vabalt varieerida ja vene keelt õigesti kasutada ning mitte rahulduda seedimatute fraasidega, nagu "nimi pole sisestatud".

    Kohustuslike väljade massiivi olemasolul saab kogu kontrolli teha tsüklina. Muudetud kontrollimisfunktsioon näeks välja järgmine:


    < script language = "javascript" >


    Silmuses kontrollitakse kõiki vormivälju, et näha, kas need vastavad kohustuslikele väljadele. Sobivuse ilmnemisel viiakse kontroll läbi samamoodi nagu ülalpool, kuid ühe hoiatusega – veateadetega massiivi kasutuselevõtt eeldas funktsiooni alert() mõningast muutmist, nii et nüüd sõltub vea tekst otseselt välja nimi.

    See on põhimõtteliselt kõik. See funktsioon on üsna universaalne ja minimaalsete kohandustega (sisuliselt kahe massiivi sisu) saab kohandada mis tahes kujul.

    tagasi

    Kliendipoolne väljavalideerimine peaks olema igal vormil, selles pole kahtlust. Esiteks ei pea kasutaja ootama ja närve raiskama. Teiseks näitate, et hoolite oma külastajatest. Külastajal on väga tore ette teada, mida ta valesti tegi.

    Selles õpetuses õpime, kuidas jQuery vormi kinnitamist reaalajas kirjutada. Kui soovite näha, mida saate välja mõelda, klõpsake DEMO ja vaadake.

    Mida me täna õpime? Kuidas me jquery valideerimist rakendame?

    Selle saavutamiseks on palju viise, siin on kõige levinumad:

  • Saame luua sisestusvälja kõrvale SPAN-märgendi (mis sisaldab kinnitusteavet) ja anda sellele konkreetse ID, mille kaudu me sellele juurde pääseme.
  • Saame mähkida iga välja P-märgendisse, mille sees loome SPAN-i, mis sisaldab teavet välja valideerimise kohta.
  • P-välja saab mähkida ka sildiga, mille sees saab SPAN-i “õppida” (jquery abil käigu pealt).
  • See kõik toimib, aga mitte parim viis rakendamine. Miks? Kuna sisendvormis on liiga palju täiendavat HTML-koodi, mida me ei vaja. Tuleb jälgida.

    Teeme seda nii, nagu mina seda enda jaoks tegin. Minu arvates on see kõige õigem lahendus, kuigi keegi seda ei tee. Ausalt öeldes pole ma näinud kedagi teist seda tegemas... kui tead, siis kirjuta mulle tunni lõpus kommentaariks.

    Mida me hakkame tegema?
  • Me kirjutame lihtne vorm, ilus ja puhas semantiline kood, ilma tarbetute siltideta.
  • Kuna inimesed täidavad iga välja eraldi, saame seda jälgida ja kinnitada jooksvalt:
    • Määrake selle asukoht aknas (ülemine vasak nurk)
    • Määrake selle laius
    • Nii saame teada, kus on selle lõpp.
    • Lisame valideerimisinfo kindla ID-ga DIV-plokki konkreetsest väljast paremale. Määrame ka vastavad klassid .correct või .incorrect.
  • Märkus. See on vastuvõetav ka inimestele, kes ei kasuta brauseris JavaScripti. Need kinnitatakse serveri poolel.

    Projekti struktuur

    Peame looma kolm faili:

  • index.html
  • stiil.css
  • validate.js
  • Vaatame kõike samm-sammult... kõigepealt HTML-kood, seejärel vajalik CSS-stiilid, keskendume hiljem peamisele jQuery vormi valideerimisskriptile.

    HTML-i kirjutamine

    Teeme selle kõik lahti...

    1. samm - looge põhiline HTML kood

    Alustamiseks looge fail index.html ja kleepige see põhikood sinna. Näete, et lisame jQuery faili allpool, enne validation.js-i, mis sisaldab meie valideerimisskripti.

    2. samm – looge kolmeks osaks jagatud kujund

    Loome kolmeosalise vormi, et näha, kuidas erinevaid sisestusvälju ja kabe valideerida. Jaotamiseks kasutame iga jaotise pealkirjadeks FIELDSET ja LABEL:

  • Isikuandmed (kasutajanimi, sünnipäev, sugu, sõiduk).
  • E-post (kasutaja e-posti sisestusväli).
  • Minust ( lühike teave kasutaja kohta).
  • Vormi reaalajas kinnitamine jQuery isikliku teabe e-postiga Teie kohta 3. samm – lisage väljad ja kinnitamisnupp

    Suurepärane, nüüd loome oma vormi jaoks mõned sisestusväljad. Meie tunni jaoks valisime spetsiaalselt mitu erinevat valdkonda:

    • Kolm INPUT väljad(kasutajanimi, sünniaeg, meiliaadress).
    • RADIO nupud soo valimiseks.
    • MÄRKUSKAST jaoks Sõiduk kasutaja.
    • TEXTAREA kasutajateabe jaoks.
    • NUPP „Kinnita” nupu jaoks.

    Mähkime iga LABLE ja sisestusvälja P-sildisse, et eraldada see eraldi plokkideks. Nüüd sinu oma lõplik fail index.html näeb välja selline:

    Vormi reaalajas kinnitamine jQuery isikliku teabe abil

    Täisnimi:

    Sünnipäev (pp-kk-aaaa):

    Mina olen: Mees Naine

    Oman: auto lennuk jalgrattalaev

    Meil

    Meil ( [e-postiga kaitstud]):

    Sinust

    Räägi meile natuke endast:

    Esita

    See võib tunduda pisut hirmutav, kuid selle põhjuseks on asjaolu, et meie vormil on palju sisestusvälju. Tegelikult pole siin midagi keerulist. Salvestage oma fail ja vaadake oma brauserist, mis juhtub. Nüüd kaunistame veidi...

    CSS-i lisamine

    Kuna CSS-stiil ei ole tänase õpetuse põhiteema, siis me sellel pikemalt ei peatu. Vajame lihtsalt seda CSS-koodi, et vorm näeks kena välja ja kõik plokid oleksid paigas.

    Looge fail style.css ja kleepige sellesse allolev kood. Nüüd näeb tulevase jquery valideerimisega vorm välja hämmastav. Pole see?

    Keha ( taust: #efefef; veeris: 0; polster: 0; ääris: puudub; teksti joondus: keskel; font: tavaline 13px Georgia, "Times New Roman", Times, serif; värv: #222; ) #content ( laius: 500 pikslit: ääris-ala: 25px: 1px - ääris: 7px; 7px raadius: tavapärane 30px Verdana, Arial, sans-shadow: 1px 1px #fff; sisend; : 3px; ) silt ( kursor: kursor; ) .block ( ekraan: plokk; ) väike ( tähevahe: 1px; fondi suurus: 11 pikslit; fondi stiil: kaldkiri; värv: #9e9e9e; ) .info ( text- joondamine: 5px; -webkit-box-shadow: -1px 1px 2px #a9a9a9; kast-vari: -1px 1px 2px #a9a9a9; ) .error ( taust: #f60000; ääris: 3px solid #d50000; ) .correct ( taust: #56d800; ääris: 3px solid #008000; ) .wrong ( font-weight: bold; color: #e90000; ) .normal ( fondi kaal: tavaline; värvus: # 222; ) # saata ( taust: # 3f5a81; laius: 100%; ääris: 5 pikslit, ühtlane # 0F1620; font: paks 30 pikslit Verdana, sans-serif; värv: # fafafa; tekst- vari: 1px 1px 1px #0F1620; -webkit-border-radius: 7px) #send:hover (taust: #4d76b1; ääris: 5px solid #253750; color: #fff; ) #send: (teksti taane: -10 pikslit; )

    jQuery vormi valideerimise kirjutamine

    See on tunni kõige huvitavam ja põnevam osa. Kuid kõigepealt peame mõtlema ja kirjeldama oma töö põhipunkte. Peate kõike planeerima.

    Planeerivad

    Enne kirjutamist küsige endalt kolm küsimust:

  • Mida me sellest skriptist vajame?
  • Kuidas me seda teha tahame?
  • Kuidas me selle saavutame?
  • See on selge, me tahame, et skript vormi kinnitaks. Aga kuidas? Soovime, et see teeks seda reaalajas (kui kasutaja lõpetab sisestusvälja täitmise) ja kui klõpsate nuppu "Kinnita". Seetõttu peame kirjutama mitu funktsiooni: iga sisestusvälja jaoks eraldi ja kõigi vormide jaoks (mida kutsutakse, kui klõpsate nuppu „Kinnita”).

    Koodi kordamise vältimiseks peame looma JavaScripti objekt selle jaoks.

    Mida me selleks vajame?

    Meie puhul nimetatakse JS-objekti jVal, see sisaldab järgmisi meetodeid:

    • jVal.fullName
    • jVal.sünnikuupäev
    • jVal.sugu
    • jVal.vehicle
    • jVal.email
    • jVal.umbes

    Muutuja, mis sisaldab olekut praegune viga- jVal.errors. Ja meetod, mis kontrollib vigade olemasolu ja kinnitab vormi esitamise või lükkab selle tagasi. Kui leitakse vigu, suunab see kasutaja vormi algusesse, kus saab kõik väljad õigesti täita.

    Meetodi nimi on jVal.sendIt

    Nüüd saame hakata arenema jQuery skript vormi kinnitamine. Kui kirjutame esimese meetodi, läheb kõik lihtsamalt ja kiiremini.

    Alustame tööd

    Koodi alus on lihtne, selles süntaksis sisaldub absoluutselt kogu jquery kood:

    $(dokument).ready(function())( jVal = ( ); ));

    Kasutajanime välja kinnitamine

    Meie esimene meetod töötleb välja "kasutajanimi". Kleepige see jVal objekti sisse, nagu on näidatud näites:

    Var jVal = ( "täisnimi" : funktsioon() ( ) );

    Nüüd kirjutame meetodi sisse paar rida koodi. Lihtsalt kleepige need sisse ja me vaatame järgmisena, mida see tähendab:

    $("keha").append(""); var nameInfo = $("#nameInfo"); var ele = $("#täisnimi"); var pos = ele.offset();

    1. rida: lisame dokumendile DIV ploki. Klassi info, annab teatud stiili plokile, mis on määratletud failis style.css, samuti muudab selle nähtamatuks, kasutades display:none; Leidke ID, see on selleks, et teil oleks kiire juurdepääs sellesse plokki ja sellega manipuleerida jQuery abil. See DIV-plokk sisaldab väljade kinnitamise teavet.

    3. rida: kirjutame sellele plokile väljakutse muutujas, kuna me kasutame seda suur hulküks kord.

    4. rida: nagu ka eelmisel juhul, salvestame muutujasse ühenduse täisnimeväljaga. Kasutame seda ka palju kordi.

    Funktsioon jQuery offset() tagastab elemendi praeguse asukoha dokumendi suhtes. Tagastati objektina, mis sisaldab ülemist ja vasakpoolset atribuuti. Kasutame seda funktsiooni ele-s sisendvälja asukoha määramiseks.

    Lisame nüüd veel paar rida...

    NameInfo.css(( üleval: pos.top-3, vasakul: pos.left+ele.width()+15 ));

    Nagu näete, hakkame tegutsema nameInfo ploki stiilidega. Täpsemalt määrame selle asukoha sisestusväljast paremale. Selleks liigutame seda 3 pikslit ülespoole (2. koodirida) ja 15 pikslit väljast paremale (3. koodirida).

    Oleme kirjutanud 50% esimesest meetodist, toome selle lõpuni. On aeg kindlaks teha, kui õigesti kasutaja andmed sisestas, ja tegutseda...

    If(ele.val().pikkus< 6) { jVal.errors = true; nameInfo.removeClass("correct").addClass("error").html("← at least 6 characters").show(); ele.removeClass("normal").addClass("wrong"); } else { nameInfo.removeClass("error").addClass("correct").html("√").show(); ele.removeClass("wrong").addClass("normal"); }

    Ei näe hea välja? Pole midagi karta...

    1. rida: kontrollime, et kasutaja sisestatud nimi ei oleks lühem kui 6 tähemärki.

    2. rida: määrake muutuja jVal.errors väärtuseks true, kuna oleme tuvastanud, et kasutajanimi on liiga lühike. Kasutame seda edasi.

    3. rida: hakkame tegutsema oma nameInfo elemendiga (milles kuvame teavet). Esiteks eemaldame klassi õige ja määrame klassi vea. Järgmisena sisestame elemendi nameInfo sisu, see on teave, et nimi peab olema pikem kui 6 tähemärki. Ja lõpuks muudame oma sõnumi kasutajale nähtavaks.

    4. rida: hakkame manipuleerima oma ele-elemendiga (kasutajanime sisestusvorm). Eemaldame tavalise klassi ja määrame selle valele.

    5. rida: kui kasutajanimi on piisavalt pikk, siis...

    6. rida: hakkame manipuleerima elemendi nameInfoga. Kui klassi viga on määratud, eemaldame selle ja määrame klassi õigeks. Sisestame sisse "linnu", et mõista, et kõik on korras. Ja kuvab kasutajale sõnumi.

    7. rida: töötame ele-elemendiga. Eemaldame vale klassi, kui see on rakendatud, ja rakendame tavaklassi.

    Oleme loonud oma esimese valideerimismeetodi! On aeg seda testida. Peame olema kindlad, et meie meetodit kutsutakse välja, kui kasutaja on oma nime sisestamise lõpetanud. Selle rakendamiseks peame toimingule lisama sündmuse. Kasutame funktsiooni change(). Kleepige allolev näidiskood objekti jVal alla:

    $("#täisnimi").change(jVal.fullName);

    Mida see tähendab inimkeel: Kui kasutaja muudab välja "Täisnimi" väärtust ja on sellega siis tehtud, kutsutakse välja fullName meetod, mis kinnitab välja.

    Teie fail validate.js peaks nüüd sisaldama järgmist koodi:

    < 6) { jVal.errors = true; nameInfo.removeClass("correct").addClass("error").html("← at least 6 characters").show(); ele.removeClass("normal").addClass("wrong"); } else { nameInfo.removeClass("error").addClass("correct").html("√").show(); ele.removeClass("wrong").addClass("normal"); } } }; // bind jVal.fullName function to "Full name" form field $("#fullname").change(jVal.fullName); });

    Sünnikuupäeva välja kinnitamine

    Nüüd läheb kõik kiiremini. Peame lihtsalt koopia tegema fullName meetodist ja tegema mõned muudatused.

    Nüüd kopeerige meetod fullName, kleepige see alla ja nimetage see ümber sünnikuupäevaks. Ja tehke järgmised muudatused:

    • Kõikjal, kus nameInfo kuvatakse, asendage see sünniteabega
    • #täisnimi asemel kasutage muutuja ele jaoks #birthday
    • Kleepige see mall regulaaravaldis allpool on birthInfo.css() avaldis:
    var patt = /^(2)\-(2)\-(4)$/i;
    • Meie vana if() avaldis peaks olema:
    if(!patt.test(ele.val()))
    • Selle välja sõnum on järgmine: sisestage kuupäev õiges vormingus

    Sünnikuupäeva meetod peaks pärast nende muudatuste tegemist välja nägema järgmine:

    "sünnikuupäev" : funktsioon ()( $("body").append(""); var birthInfo = $("#birthInfo"); var ele = $("#sünnipäev"); var pos = ele.offset( ); birthInfo.css(( üleval: pos.top-3, vasakul: pos.left+ele.width()+15 )); /i; if(!patt.test(ele.val())) ( jVal.errors = true; birthInfo.removeClass("correct").addClass("error").html("← sisestage kuupäev õiges vormingus ").show(); ele.removeClass("normal").addClass("wrong"); ) else ( birthInfo.removeClass("error").addClass("correct").html("√").show (); ele.removeClass("vale").addClass("tavaline" ) )

    Kasutades regulaaravaldist (rida 14), kontrollime, et kuupäev oleks vormingus 28.03.1987. 16. real kontrollime, et kasutaja sünnikuupäev ühtiks regulaaravaldise mustriga.

    Ja loomulikult peame sünnikuupäeva väljale lisama muutuse() sündmuse:

    $("#sünnipäev").change(jVal.sünnikuupäev);

    Nüüd on meil veel üks töötav jQuery vormi valideerimismeetod. Suurepärane töö!

    Valideerimine valdkonnas muutunud

    Jällegi kopeerige meetod fullName, nimetage see sugu ümber ja tehke järgmised muudatused:

    • Nimetage kogu nameInfo ümber nimeks genderInfo
    • #täisnimi asemel kasutage muutuja ele jaoks #woman
    • Muutke avaldis genderInfo.css() ülemine muutuja top: pos.top-10 ja vasakult vasakule: pos.left+ele.width()+60
    • Meie if() lause peaks olema:
    if($("sisend:kontrollitud").pikkus === 0)
    • Sõnum kasutajale on järgmine: kas olete mees või naine?

    Selline peaks soomeetod pärast muudatusi välja nägema:

    "sugu" : funktsioon ()( $("body").append(""); var genderInfo = $("#genderInfo"); var ele = $("#naine"); var pos = ele.offset( ); genderInfo.css(( üleval: pos.top-10, vasakul: pos.left+ele.width()+60 )); if($("input:checked").length === 0) ( jVal .errors = true; genderInfo.removeClass("õige").addClass("error").html("← kas sa oled mees või naine?").show("normaalne").addClass ("vale"); else ( genderInfo..removeClass("error").addClass("correct").html("√").show(); ele.removeClass("wrong").addClass("normaalne " ) ) )

    14. real kontrollime, kui palju raadiovalijaid on valitud. Kui 0, siis kasutaja ei valinud midagi, kuvame veateate.

    Ja nagu alati, lisame soopõhise meetodi raadionuppe:

    $("sisend").change(jVal.gender);

    Valideerimise kontrollijad – sõiduki omand

    Nüüd kopeerime soomeetodi ja nimetame selle ümber sõidukiks, tehke järgmised muudatused:

    • Asendage kogu genderInfo sõidukiinfoga
    • #woman asemel sisestage #ship for ele.
    • Avaldis vehicleInfo.css() tuleb vasakule väärtus jätta: pos.left+ele.width()+40
    • Meie if() lause peaks nüüd olema:
    if($("sisend:kontrollitud").pikkus