I denne opplæringen ser vi på en av jQuery UI 1.8s nyeste komponenter - Autocomplete-widgeten. Autofullføring av tekstfelt kan være et populært valg med besøkende på nettstedet ditt fordi de gjør inntasting av opplysninger mye enklere. De kan brukes på produktsøkfelt for eksempel, eller når en besøkende må skrive inn et land, eller en by, eller noe annet som kan være et valg fra et felles datasett. I tillegg til at det er populært blant besøkende, er jQuery UI Autocomplete populært blant utviklere fordi det er enkelt å bruke, kraftig og fleksibel.
Jeg er ikke en massiv fan av Facebook, jeg foretrekker mye Twitter (@danwellman btw), men en Facebook-funksjon jeg liker er meldingsfunksjonen som lar deg sende en melding til en venn eller venner. Jeg liker hvordan autofullførelsen brukes til å gjøre valg av vennens navn enklere, og hvordan navnene formateres når de er valgt og lagt til i feltet "til", f.eks. de har hver en nær lenke i dem som gjør at navnet enkelt kan fjernes uten å måtte velge tekst.
I denne opplæringen bruker vi jQuery UI Autocomplete-widgeten til å kopiere dette aspektet av Facebooks meldingssystem. Vi ser ikke på å sende meldinger. Dette er hva vi skal skape:
Vi må bygge en tilpasset nedlasting av jQuery UI som inneholder bare komponentene vi trenger; Gå over til nedlastningsbyggeren på http://jqueryui.com/download. Vi må bruke følgende kjernekomponenter:
Vi trenger også Autocomplete-widgeten selv, så sørg for at bare de ovennevnte elementene, samt Autofullføring, er merket i delen Komponenter til venstre. Bruk standardtemaet (UI Lightness) og kontroller at versjon 1.8 er valgt til høyre.
Når du er lastet ned, opprett en ny mappe på datamaskinen din og ring den Autofullfør. Åpne arkivet og kopier deretter css og js mapper i den nye mappen du nettopp har opprettet. Dette vil gi deg alle bibliotekene som kreves for dette eksemplet, inkludert jQuery selv, så dette trenger ikke lastes ned separat.
La oss se på HTML for først av alt:
Det er en ganske vanlig form; det er en ytre beholder Vi må også koble til filene vi har pakket ut fra jQuery UI-arkivet, samt et tilpasset stilark; Følgende filer skal gå inn i av siden: Følgende filer skal gå på slutten av : Vi bruker et veldig enkelt, nøytralt tema i dette eksemplet, hvorav det meste er rent som et eksempel. Svært få av stilene kreves, og de fleste kan endres om nødvendig. Følgende CSS brukes i autocomplete.css stilark (alle jQuery UI styling er i jquery-ui-1.8.custom.css stilark): For å gi skjemaet en fin gjennomsiktig ramme med avrundede hjørner bruker vi CSS3 RGBA regelen og -moz-border-radius, -webkit-border-radius og border-radius regler; mest populære nettlesere støtter nå disse reglene, inkludert Firefox, Safari, Chrome og Opera. IE støtter ikke noen av dem, og selv om det kan bruke et filter for å implementere rudimentær opacitet, vil avrundede hjørner måtte støttes ved bruk av bilder. Effektiviteten av RGBA gjennomsiktighet er ikke vist fullt ut i dette eksemplet; men denne typen form ville trolig bli brukt som flytende modal overlegg i en full implementering, som ville sitte over det faktiske innholdet på siden. Beholderen Vi stiler også mottakerne, som blir lagt til i På dette stadiet skal skjemaet se slik ut: Deretter må vi legge ved Autocomplete-widgeten til innen Widgeten er festet til bruker autofullfør () metode. Vi leverer et objekt bokstavelig som et argument til metoden, som konfigurerer kilde alternativet og å velge og endring Hendelses tilbakeringinger. De kilde alternativet brukes til å fortelle widgeten hvor du får forslagene til Autofullfør-menyen fra. Vi bruker en funksjon som verdien av dette alternativet, som aksepterer to argumenter; den første er begrepet inngått i , den andre er en tilbakeringingsfunksjon som brukes til å sende forslagene tilbake til widgeten. Innenfor denne funksjonen bruker vi jQuery's getJSON () Metode for å sende termen til en server-side PHP-fil. PHP-filen vil bruke termen til å trekke ut samsvarende kontaktnavn fra en MySQL-database. Vi bruker en JSONP tilbakeringing for å behandle dataene som returneres fra serveren; tilbakeringingsfunksjonen som overføres som det andre argumentet til kildealternativet, forventer å motta dataene i en matrise, slik at vi først lager et tomt utvalg og bruker jQuery's Hver() metode for å behandle hvert element i JSON-arrayet returnert av serveren. Vi repeterer bare over hvert element i denne gruppen, og legger til hvert forslag til vårt nye utvalg. Når vårt nye array er bygget, sender vi det til tilbakeringingsfunksjonen for widgeten som skal vises i menyen. Vi definerer da en handler for Autocomplete's tilpassede å velge begivenhet; Denne funksjonen blir utført av widgeten hver gang et forslag er valgt fra Autofullfør-menyen. Denne funksjonen overføres automatisk to argumenter - hendelsesobjektet og a ui objekt som inneholder forslaget som ble valgt. Vi bruker denne funksjonen til å formatere mottakernavnet og legge det til Til slutt legger vi til en handler for endring begivenhet; Denne funksjonen vil bli påkalt når verdien av at Autofullførelsen er knyttet til endringer. Vi bruker bare den til å fjerne verdien fra fordi vi allerede har lagt til den formaterte versjonen i vår container Dette er all konfigurasjon vi trenger for denne bestemte implementeringen, men det er fortsatt et par tilleggsfunksjoner vi trenger for å legge til ryddige ting opp litt. Etter autofullfør () metode legg til følgende kode: De at vår Autofullføring er festet til, er delvis skjult og dens container Vi må også håndtere klikk på ankeret som legges til hver formatert mottaker; vi bruker jQuery's bo() metode fordi disse elementene kan eller ikke eksisterer på siden til enhver tid, og det er lettere å binde håndteringsfunksjonen hver gang vi oppretter en av disse ankre. Når en av disse ankrene klikkes, er alt vi gjør, navigere opp til forankringen av ankeret som ble klikket og deretter fjernet det fra siden. Husk da vi korrigerte karatets posisjon tidligere i skriptet? Vi må bare sjekke om alle mottakerne er fjernet, og i så fall tilbakestill posisjonen tilbake til standardinnstillingen. Jeg brukte en MySql-database som inneholder en tabell som viser hvert av mottakernavnene, og følgende PHP-fil for å godta dataene som sendes av getJSON () metode og trekk tilsvarende mottakere fra databasen: For å kjøre de nedlastbare eksempelfilene, trenger du en utviklingswebserver med PHP installert og konfigurert, samt MySQL og riktig database og tabell. Når et brev er skrevet inn i "til" -feltet, sendes dette brevet til serveren og brukes til å trekke ut hvert navn som begynner med brevet som ble skrevet. De matchende navnene sendes deretter tilbake til siden som JSON og vises i forslag-menyen: Denne opplæringen viste hvordan du replikerer Facebooks meldingsskjema, spesielt hvordan venner legges til meldingsskjemaet som mottakere ved hjelp av en Autofullføring, og hvordan vennenavnene er formatert når de er lagt til, slik at de enkelt kan fjernes. Vårt eksempelskjema gjør egentlig ikke noe, men det vi trenger å gjøre for å sende skjemaet, ville være å sende innholdet i skjemaet til en server-sidefil for sending ved hjelp av AJAX, som lett kunne bli hekta inn i sendingen Hendelse av send-knappen som brukes på skjemaet. Mottakerne vil trenge å ha en slags mening til back-end-systemet selvfølgelig, og vil trolig bli kartlagt til e-postadresser i databasen. Vi trenger å hente tekstinnholdet i hver av elementer før du går tilbake til serveren, selv om dette ville være en ganske triviell sak. JQuery UI Autocomplete-widgeten gjør det enkelt å koble til en datakilde og inneholder en rik pakke med hendelseshåndterere som vi kan levere funksjoner til for å reagere på tekst som kommer inn i det tilhørende feltet, eller et forslag velges fra menyen. Widgeten er utformet med jQuery UIs omfattende CSS-rammeverk og kan enkelt endres slik at det samsvarer med ditt eksisterende nettstedstema. Alt i alt er det en utmerket widget som er enkel å bruke og gir god funksjonalitet.
Trinn 3 Styling Form
#formWrap polstring: 10px; stilling: absolutt; float: venstre; background-color: # 000; bakgrunn: RGBA (0,0,0, 0,5); -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius: 10px; #messageForm width: 326px; grense: 1px solid # 666; background-color: #eee; #messageForm fieldset padding: 0; margin: 0; stilling: i forhold; border: none; background-color: #eee; #messageForm legend synlighet: skjult; høyde: 0; #messageForm span display: block; bredde: 326px; polstring: 10px 0; margin: 0 0 20px; text-indent: 20px; background-color: #bbb; grensebunn: 1px solid # 333; font: 18px Georgia, Serif; farge: #fff; #friends width: 274px; polstring: 3px 3px 0; margin: 0 auto; grense: 1px solid #aaa; background-color: #fff; markøren: tekst; #messageForm #to width: 30px; margin: 0 0 2px 0; polstring: 0 0 3px; stilling: i forhold; topp: 0; float: venstre; border: none; #messageForm input, #messageForm textarea display: block; bredde: 274px; padding: 3px; margin: 0 auto 20px; grense: 1px solid #aaa; #messageForm label display: block; margin: 20px 0 3px; text-indent: 22px; font: fet 11px Verdana, Sans-serif; color: # 666; #messageForm #toLabel margin-top: 0; #messageForm-knappen float: right; margin: 0 0 20px 0; #messageForm #cancel margin-right: 20px; #friends span display: block; margin: 0 3px 3px 0; polstring: 3px 20px 4px 8px; stilling: i forhold; float: venstre; background-color: #eee; grense: 1px solid # 333; -moz-border-radius: 7px; -webkit-border-radius: 7px; border-radius: 7px; color: # 333; font: normal 11px Verdana, Sans-serif; #friends span en posisjon: absolute; høyre: 8 piksler; top: 2 piksler; color: # 666; font: fet 12px Verdana, Sans-serif; text-decoration: none; #friends span a: hover color: # ff0000; .ui-menu .ui-meny-element white-space: nowrap; polstring: 0 10px 0 0;
Trinn 4 Feste autofullføringen
// legg til klikkbehandler til venner div $ ("# venner"). klikk (funksjon () // fokus 'til' felt $ ("# til") .fokus ();); // legg til live handler for klikk på fjern linker $ (". remove", document.getElementById ("venner")) live ("klikk", funksjon () // fjern gjeldende venn $ (dette) .parent .remove (); // riktig 'til' feltposisjon hvis ($ ("# friends span") lengde === 0) $ ("# til"). css ("topp", 0); );
Trinn 5 Tilleggskode og ressurser
$ Rad [ "navn"]); // echo JSON til side $ respons = $ _GET ["tilbakeringing"]. "(". json_encode ($ friends). ")"; " ekko $ respons; mysql_close ($ server); ?>