Slik bygger du HTML5 skjemaer på kryss-leser

I denne opplæringen skal vi se på hvordan du serverer HTML5-skjemaer til moderne nettlesere, mens du kompenserer for eldre nettlesere ved å bruke en blanding av Webforms2, Modernizr, jQuery UI og diverse jQuery-plugins.


Introduksjon

HTML5-drevne skjemaer gir mye semantisk markering, og fjerner behovet for mye JavaScript.

En av de første anstrengelsene mot HTML5 var WHATWGs Web Forms 2.0, opprinnelig kalt XForms Basic. Spesifikasjonen innførte ny formkontroll og validering blant annet. Senere ble den innlemmet i HTML5, og ble deretter fjernet av repetisjonsmodellen, noe som resulterte i det vi kjenner i dag som HTML5 Forms.

Det evigvarende problemet, bakoverkompatibilitet, forblir fortsatt hodepine, dessverre. Utviklere har å håndtere den fryktede Internet Explorer, som, som du kanskje har gjettet, ikke gir mye støtte for den nyeste utviklingen i skjemaer - selv i den nyeste tilgjengelige betaen til IE9. Eldre versjoner av IE? Fagetaboutit.

Ikke desto mindre vil vi bruke disse nye funksjonene, og bruke dem, vi vil! I dag skal vi se på noen av disse nye elementene. Vi kontrollerer om nettleseren støtter disse funksjonene, og hvis ikke, gi tilbakebetalinger ved hjelp av CSS og JavaScript.


Verktøy: Modernizer

Vi gir bare tilbakebetalinger bare til nettlesere som ikke støtter HTML5-skjemaer, eller bestemte deler av dem. Men i stedet for å stole på nettleserens sniffing, er den riktige teknikken å bruke funksjonsdeteksjon. Vi bruker det populære Modernizr-biblioteket.

Modernizr er et lite JavaScript-bibliotek som tester den nåværende nettleseren mot en mengde HTML5- og CSS3-funksjoner.

Hvis du vil lære mer om Modernizr, kan du sjekke ut "A Video Crash Course i Modernizr" Premium Tutorial tilgjengelig på Tuts + Marketplace.


Verktøy: Webforms2

Webforms2 er et JavaScript-bibliotek av Weston Ruter, som gir en kryssbrowser-implementering av den "forrige" versjonen av HTML5-skjemaer, "WHATWG Web Forms 2.0" -spesifikasjonen.

Vi skal bruke den til validering og utvide funksjonalitet for nåværende elementer.


Widget: Slider

Spesifikasjonen beskriver rekkefølgen input som en presis kontroll for å sette elementets verdi til en streng som representerer et tall.

Her er en forhåndsvisning av hvordan det ser ut i Opera 10.63:

For å gi tilbakebetaling for andre nettlesere, bruker vi jQuery UIs skyve widget.

Først, Vi lager vår initialiseringsfunksjon, som skaper glidebryteren fra inngangsområdet.

var initSlider = funksjon () $ ('input [type = range]') hver (funksjon () var $ input = $ (dette); var $ skyvekontroll = $ ('
'); var trinn = $ input.attr ('trinn'); $ Input.after ($ stolpe) .hide (); $ slider.slider (min: $ input.attr ('min'), maks: $ input.attr ('max'), trinn: $ input.attr ('trinn'), endring: funksjon (e, ui) $ (dette) .val (ui.value);); ); ;

Vi lager en ny <div> element for hvert av våre utvalgsinnganger, og ring glidebryteren på den noden. Dette skyldes at jQuery UI-skyvekontrollen ikke fungerer ved å ringe den direkte på inngangselementet.

Vær oppmerksom på at vi får attributter fra inngangen, for eksempel min, maks og skritt,, og bruker dem som parametere for skyveknappen. Dette hjelper vår fallback-skyveknappen å etterligne den virkelige HTML5-skyveknappen i funksjonalitet.

neste, Vi bruker Modernizr for å avgjøre om den nåværende nettleseren støtter denne inntypen. Modernizr legger til klasser i dokumentelementet (html), slik at du kan målrette mot bestemt nettleserfunksjonalitet i stilarket. Det oppretter også et selvbetegnet globalt JavaScript-objekt som inneholder egenskaper for hver funksjon: Hvis en nettleser støtter det, vil eiendommen evaluere til ekte og hvis ikke, vil det bli falsk.

Med den kunnskapen, for å oppdage støtte for inngangstyper, bruker vi Modernizr.inputtypes [type].

hvis (! Modernizr.inputtypes.range) $ (dokument) .ready (initSlider); ;

Hvis det ikke er noen støtte for rekkeviddeinngangen, legger vi til initSlider fungere til jQuery's document.ready, for å initialisere vår funksjon etter at siden har lastet inn.

Slik ser skyvekontrollen ut i en nettleser uten opprinnelig støtte for rekkeviddeinngangen.


Widget: Numerisk Spinner

Å sitere Mark Pilgrim:

Å be om et nummer er vanskeligere enn å be om en e-postadresse eller en nettadresse.

Derfor er vi utstyrt med en egen skjemakontroll som spesifikt omhandler tall: den numeriske spinneren, også kalt numerisk stepper.

På tidspunktet for denne skrivingen støttes den av Opera og Webkit-baserte nettlesere; her er et øyeblikksbilde fra Opera 10.6.

Fordi jQuery ikke gir en numerisk spinner, bruker vi i stedet et jQuery-plugin av Brant Burnett, bygget som en jQuery UI-widget.

Vi implementerer samme teknikk som før; bygge opp funksjonen for å lage spinner, test med Modernizr, og legg funksjonen til $ (Document) .ready.

var init = $ (dette); $ input.spinner (min: $ input.attr ('min' ), maks: $ input.attr ('max'), trinn: $ input.attr ('step'));); ; hvis (! Modernizr.inputtypes.number) $ (dokument) .ready (initSpinner); ;

Fordi tallinnganger støtter også min, maks og skritt, vi får attributter fra feltet, og bruker dem som parametere for initialisering av numerisk spinner plugin.

Og vår fallback-widget ser slik ut:


Widget: Date Picker

Det er ikke mindre enn seks inngangstyper for å fungere som date pickers.

  • Dato
  • måned
  • uke
  • tid
  • datetime og
  • og datetime-lokal

På tidspunktet for denne skrivingen er den eneste nettleseren som ordentlig støtter dem, Opera, versjon 9+.

     

For nå gir vi bare tilbakebetaling for Dato input, ved hjelp av jQuery UI Datepicker. Du er velkommen til å bruke noe annet plugin for å fullstendig etterlikne funksjonaliteten til HTML5-datoinnsamlingsposten i implementeringen.

var initDatepicker = funksjon () $ ('input [type = date]') hver (funksjon () var $ input = $ (dette); $ input.datepicker (minDate: $ input.attr ), maxDate: $ input.attr ('max'), dateFormat: 'yy-mm-dd';;); ; hvis (! Modernizr.inputtypes.date) $ (dokument) .ready (initDatepicker); ;

Widget: Color Picker

For øyeblikket gir ingen nettleser støtte for fargen inngang. Så, til de kommer opp, må de alle bruke vår fallback-teknikk.

 

Vi bruker Stefan Petre's ColorPicker jQuery-plugin, siden jQuery UI ikke gir en med basepakken ennå.

var initColorpicker = funksjon () $ ('input [type = color]'). hver (funksjon () var $ input = $ (dette); $ input.ColorPicker (onSubmit: funksjon (hsb, hex, rgb, el) $ (el) .val (hex); $ (el). ColorPickerHide ();;;); ; hvis (! Modernizr.inputtypes.color) $ (dokument) .ready (initColorpicker); ;

Og vårt resultat:


Input Type: Søk

Den nye Søke input type er implicit brukt til semantikk, men kan gi mange interessante funksjoner i fremtiden.

For øyeblikket tilbyr bare webkitbaserte nettlesere støtte for denne funksjonen. Spesifikasjonen støtter også a resultater Tilordne å vise et antall søkte ord i en rullegardin.

Det skal se slik ut på Safari på OS X:

Resten av nettleserne viser dette som et standard tekstfelt, så du kan trygt bruke den med standardoppretting.


Input Type: URL og Email

Disse to inngangstyper, url og e-post, brukes til valideringsformål. De kan være spesielt nyttige i mobile nettlesere, der tastaturoppsettet på skjermen kan endres for å passe det fokuserte feltet. Dette er allerede implementert i Safari på iOS (iPhone, iPad, iPod) og noen versjoner av Android.

 

Disse innspillstyper kan implementeres av Webforms2 i andre nettlesere.

Du kan fritt bruke disse typene i dine nye prosjekter, da de faller tilbake til enkle tekstbokser. På telefonen din finner du at tastaturet endres tilsvarende, hvis du leverer disse typene til dine innganger.


Egenskap: Obligatoriske felt

Den nye spesifikasjonen introduserer det veldig hendig nødvendig Egenskap. I stedet for å bruke fancy JavaScript for å ta vare på våre obligatoriske felt, kan vi nå enkelt bruke dette attributtet.

For nettlesere som ikke støtter dette attributtet, kan vi igjen bruke Webforms2. Så, siden vi har tatt med det fra starten, er det ingenting å bekymre deg for.

Merk: Pass på å tilordne en Navn Tilskrive til skjemaelementene dine, eller nødvendig Attributtet trer ikke i kraft.


Egenskap: Mønster

De mønster Attributt brukes til felt validering og aksepterer bare verdier hvis de samsvarer med et bestemt format, definert med vanlige uttrykk. Hvis den oppgitte verdien ikke samsvarer med mønsteret, vil skjemaet ikke sende inn.

For eksempel, for å validere et telefonnummer, må vi bruke følgende mønster, eller vanlig uttrykk:

De mønster Attributtet kan implementeres i nettlesere som ikke støtter det, ved hjelp av Webforms2.


Egenskap: Autofokus

De autofokus Attributt gjør akkurat hva det står: Fokuserer automatisk en av våre kontroller. Den støttes for tiden i webkitbaserte nettlesere (Safari, Chrome, etc.) og Opera. Husk: Bare en skjemakontroll kan motta dette attributtet.

Webforms2 tar seg av implementeringen i ikke-støttede nettlesere.


Egenskap: Plassholder

De plassholder Attributt er noe vi har gjort med JavaScript i mange år. Det legger til en del informasjon om feltet, som en kort beskrivelse, som forsvinner når feltet er fokusert.

Dette attributtet støttes av de nyeste nettleserne fra Beta Firefox og Webkit.

For å etterligne oppførselen i eldre nettlesere bruker vi Placehold jQuery-plugin, av Vigis Design Lab.

var initPlaceholder = funksjon () $ ('input [plassholder]'). plassering (); ; hvis (! Modernizr.input.placeholder) $ (dokument) .ready (initPlaceholder); ;

Egenskap: Min, Maks og Trinn

De min, maks og skritt Inndataattributter angir begrensninger for bestemte skjemafelt, for eksempel datoperktøren, nummeret og rekkevidden. Du kan sikkert gjette formålet med min og max fra navnene sine. De skritt Attributt angir flerintervallet for hvert klikk eller "trinn". For å oppnå, hvis trinnverdien er 2, kan de aksepterte verdiene være 0, 2, 4 og så videre.

Disse attributter støttes bare av Opera og Webkit nettlesere akkurat nå, og implementeres som tilbakebetaling for andre nettlesere, av Webforms2.


Konklusjon

Vi har lært i dag at skape former og gi tilbakebetaling for de fleste av de nye tilleggene er en ganske enkel oppgave. Hvis folk fortsatt prøver å skremme deg fra å bruke HTML5 i dag, må du ikke være oppmerksom på dem; begynn å bruke de fantastiske verktøyene du har til disposisjon akkurat nå!

Pass på at du også sjekker ut Zoltan "Du Lac" Hawryluks flotte html5Widgets, som gir lignende løsninger, med innfødte JavaScript-widgets.


Videre lesning

  • 28 HTML5-funksjoner, tips og teknikker du må vite
  • HTML5 og CSS3: De teknikkene du snart skal bruke / a>
  • The Forms-delen av Mark Pilgrims Dive Into HTML5
  • Skjemaer i HTML5 på Mozilla Developer Center
  • W3C HTML5 Forms Spesifikasjon Working Draft
  • Sammenligning av layoutmotorer (HTML5) på Wikipedia