In deze tutorial kijken we naar een van de nieuwste componenten van jQuery UI 1.8 - de widget Autocomplete. Het automatisch invullen van tekstvelden kan een populaire keuze zijn voor bezoekers van uw site omdat ze het invoeren van informatie veel eenvoudiger maken. Ze kunnen bijvoorbeeld worden gebruikt in zoekvelden voor producten of wanneer een bezoeker een land of een stad moet invoeren of iets anders dat een keuze kan zijn uit een gemeenschappelijke gegevensset. Naast het feit dat het populair is bij bezoekers, is de jQuery UI Autocomplete populair bij ontwikkelaars omdat het eenvoudig te gebruiken, krachtig en flexibel is.
Ik ben geen massale fan van Facebook, ik geef de voorkeur aan Twitter (@danwellman btw), maar een Facebook-functie die ik wel leuk vind, is de berichtfunctie waarmee je een bericht naar een vriend of vrienden kunt sturen. Ik vind het leuk hoe de autocomplete wordt gebruikt om het selecteren van de namen van je vrienden gemakkelijker te maken, en hoe de namen worden opgemaakt zodra ze zijn geselecteerd en aan het veld 'aan' zijn toegevoegd, bijvoorbeeld ze hebben elk een nauwe link erin waardoor de naam eenvoudig kan worden verwijderd zonder dat je een tekst hoeft te selecteren.
In deze zelfstudie gebruiken we de widget voor automatisch aanvullen van jQuery om dit aspect van het berichtensysteem van Facebook te repliceren. We zullen echter niet kijken naar het daadwerkelijk verzenden van berichten. Dit is wat we gaan creëren:
We moeten een aangepaste download van de gebruikersinterface van jQuery maken met alleen de componenten die we nodig hebben; ga naar de downloadbuilder op http://jqueryui.com/download. We moeten de volgende kerncomponenten gebruiken:
We hebben ook de Autocomplete-widget zelf nodig, dus zorg ervoor dat alleen de bovenstaande items, evenals Autocomplete, zijn aangevinkt in het gedeelte Componenten aan de linkerkant. Gebruik het standaardthema (UI Lightness) en zorg ervoor dat versie 1.8 rechts is geselecteerd.
Na het downloaden, maakt u een nieuwe map op uw computer en belt u deze autocomplete. Open vervolgens het archief en kopieer het css en js mappen naar de nieuwe map die u zojuist hebt gemaakt. Hiermee krijgt u alle bibliotheekbestanden die voor dit voorbeeld nodig zijn, inclusief jQuery zelf, dus dit hoeft niet apart te worden gedownload.
Laten we naar de HTML voor de Allereerst:
Het is een vrij standaardvorm; er is een buitenste container We zullen ook een link moeten maken naar de bestanden die we hebben uitgepakt in het jQuery UI-archief, evenals een aangepast stylesheet; de volgende bestanden moeten in de van de pagina: De volgende bestanden zouden aan het einde van de : We gebruiken een heel eenvoudig, neutraal thema in dit voorbeeld, waarvan de meeste louter als voorbeeld dienen. Zeer weinig van de stijlen zijn vereist en de meeste kunnen indien nodig worden gewijzigd. De volgende CSS wordt gebruikt in de autocomplete.css stylesheet (alle jQuery UI-styling bevindt zich in de jquery-ui-1.8.custom.css stylesheet): Om de vorm een mooie transparante rand met afgeronde hoeken te geven, gebruiken we de CSS3 RGBA regel en de -moz-border-radius, -webkit-border-radius en border-radius reglement; de meest populaire browsers ondersteunen nu deze regels, waaronder Firefox, Safari, Chrome en Opera. IE ondersteunt geen van beide en hoewel het een filter kan gebruiken om rudimentaire dekking te implementeren, moeten afgeronde hoeken worden ondersteund door het gebruik van afbeeldingen. De effectiviteit van de RGBA transparantie wordt in dit voorbeeld niet optimaal getoond; maar dit type formulier zou waarschijnlijk worden gebruikt als een zwevende modale overlay in een volledige implementatie, die boven de werkelijke inhoud op de pagina zou liggen. De houder We stylen ook de ontvangers, die zullen worden toegevoegd aan de In dit stadium zou het formulier er als volgt uit moeten zien: Vervolgens moeten we de widget Autocomplete aan de binnen de De widget is gekoppeld aan de de ... gebruiken automatisch aanvullen () methode. We leveren een object letterlijk als een argument voor de methode, die het bron optie en de kiezen en verandering event callbacks. De bron optie wordt gebruikt om de widget te vertellen waar de suggesties voor het menu Autocomplete vandaan moeten komen. We gebruiken een functie als de waarde van deze optie, die twee argumenten accepteert; de eerste is de term ingevoerd in de , de tweede is een callback-functie die wordt gebruikt om de suggesties terug te sturen naar de widget. Binnen deze functie gebruiken we jQuery's getJSON () methode om de term door te geven aan een PHP-bestand aan de server. Het PHP-bestand gebruikt de term om overeenkomende contactnamen uit een MySQL-database te extraheren. We gebruiken een JSONP-callback om de gegevens te verwerken die van de server worden geretourneerd; de callback-functie die wordt doorgegeven als het tweede argument voor de bronoptie, verwacht de gegevens in een array te ontvangen, dus maken we eerst een lege array en gebruiken dan jQuery's elk() methode om elk item in de JSON-array geretourneerd door de server te verwerken. We herhalen eenvoudigweg elk item in deze array en voegen elke suggestie toe aan onze nieuwe array. Zodra onze nieuwe array is gebouwd, geven we deze door aan de callback-functie voor de widget die in het menu wordt weergegeven. Vervolgens definiëren we een handler voor de custom custom van Autocomplete kiezen evenement; deze functie wordt uitgevoerd door de widget telkens wanneer een suggestie wordt geselecteerd in het menu Autocomplete. Deze functie krijgt automatisch twee argumenten doorgegeven - het gebeurtenisobject en een ui object met de suggestie die is geselecteerd. We gebruiken deze functie om de naam van de ontvanger te formatteren en toe te voegen aan de Ten slotte voegen we een handler toe voor de verandering evenement; deze functie zal worden aangeroepen wanneer de waarde van de dat de Autocomplete is gekoppeld aan wijzigingen. We gebruiken het gewoon om de waarde van de te verwijderen omdat we de opgemaakte versie al aan onze container hebben toegevoegd Dit is de configuratie die we nodig hebben voor deze specifieke implementatie, maar er zijn nog een aantal extra functies die we moeten toevoegen om de zaken een beetje op te ruimen. Na de automatisch aanvullen () methode voeg de volgende code toe: De waaraan onze Autocomplete is gekoppeld, is gedeeltelijk verborgen en de bijbehorende container We moeten ook klikken verwerken op het anker dat aan elke opgemaakte ontvanger is toegevoegd; we gebruiken jQuery's leven() methode omdat deze elementen op een gegeven moment al dan niet op de pagina kunnen voorkomen en het eenvoudiger is om de handlerfunctie te binden telkens wanneer we een van deze ankers maken. Wanneer op een van deze ankers wordt geklikt, navigeren we alleen naar het bovenliggende item van het anker waarop is geklikt en vervolgens van de pagina verwijderen. Weet je nog toen we de positie van de karaat eerder in het script verbeterden? We hoeven alleen maar te controleren of alle ontvangers zijn verwijderd en, als dat het geval is, de positie terug te zetten naar de standaardwaarde. Ik gebruikte een MySql-database met een tabel met alle ontvangernamen en het volgende PHP-bestand om de gegevens te accepteren die door de getJSON () methode en haal overeenkomende ontvangers uit de database: Om de downloadbare voorbeeldbestanden uit te voeren, hebt u een ontwikkelingswebserver nodig met PHP geïnstalleerd en geconfigureerd, evenals MySql en de juiste database en tabel. Wanneer een letter wordt getypt in het veld 'Aan', wordt deze brief doorgegeven aan de server en gebruikt om elke naam te verwijderen die begint met de letter die is getypt. De overeenkomende namen worden vervolgens als JSON doorgegeven aan de pagina en weergegeven in het suggestiemenu: Deze zelfstudie liet zien hoe het berichtverzendingsformulier van Facebook kan worden gerepliceerd, met name de manier waarop vrienden worden toegevoegd aan het berichtenformulier als ontvangers met een automatisch aanvullen en hoe de vriendennamen worden opgemaakt zodra ze zijn toegevoegd, zodat ze gemakkelijk kunnen worden verwijderd. Ons voorbeeldformulier doet eigenlijk niets, maar wat we zouden moeten doen om het formulier daadwerkelijk te verzenden, zou zijn om de inhoud van het formulier door te geven aan een server-side-bestand voor verzending met behulp van AJAX, die gemakkelijk kan worden toegevoegd aan de submit gebeurtenis van de verzendknop die op het formulier is gebruikt. De ontvangers moeten natuurlijk een bepaalde betekenis hebben voor het back-endsysteem en zouden waarschijnlijk worden toegewezen aan e-mailadressen in de database. We zouden de tekstuele inhoud van elk van de elementen voordat ze teruggaan naar de server, hoewel dit een vrij triviale zaak zou zijn. De jQuery UI Autocomplete-widget maakt het eenvoudig om verbinding te maken met elke gegevensbron en bevat een uitgebreide reeks gebeurtenishandlers waaraan we functies kunnen leveren om te reageren op tekst die wordt ingevoerd in het bijbehorende veld of een suggestie die wordt geselecteerd in het menu. De widget is gestileerd met behulp van het uitgebreide CSS-framework van jQuery UI en kan eenvoudig worden gewijzigd zodat het overeenkomt met uw bestaande sitethema. Al met al is het een uitstekende widget die gemakkelijk te gebruiken is en geweldige functionaliteit biedt.
Stap 3 Het formulier stylen
#formWrap opvulling: 10px; positie: absoluut; float: left; background-color: # 000; achtergrond: RGBA (0,0,0, 0,5); -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius: 10px; #messageForm width: 326px; rand: 1px vast # 666; background-color: #eee; #messageForm-veldset opvulling: 0; margin: 0; position: relative; border: none; background-color: #eee; #messageForm-legende visibility: hidden; Hoogte: 0; #messageForm span display: block; width: 326px; opvulling: 10px 0; marge: 0 0 20px; text-indent: 20px; background-color: #bbb; border-bottom: 1px solid # 333; lettertype: 18px Georgia, Serif; color: # fff; #friends width: 274px; opvulling: 3px 3px 0; marge: 0 auto; border: 1px solid #aaa; background-color: # fff; cursor: tekst; #messageForm #to width: 30px; marge: 0 0 2px 0; opvulling: 0 0 3px; position: relative; top: 0; float: left; border: none; #messageForm input, #messageForm textarea display: block; width: 274px; padding: 3px; marge: 0 auto 20px; border: 1px solid #aaa; #messageForm-label display: block; marge: 20px 0 3px; text-indent: 22px; lettertype: vet 11px Verdana, schreefloos; color: # 666; #messageForm #toLabel margin-top: 0; #messageForm-knop float: right; marge: 0 0 20px 0; #messageForm #cancel margin-right: 20px; #friends span display: block; marge: 0 3px 3px 0; opvulling: 3px 20px 4px 8px; position: relative; float: left; background-color: #eee; rand: 1px vast # 333; -moz-border-radius: 7px; -webkit-border-radius: 7px; border-radius: 7px; color: # 333; lettertype: normaal 11px Verdana, Sans-serif; #friends span a position: absolute; rechts: 8px; top: 2px; color: # 666; lettertype: vet 12px Verdana, schreefloos; text-decoration: none; #friends span a: hover color: # ff0000; .ui-menu .ui-menu-item white-space: nowrap; opvulling: 0 10px 0 0;
Stap 4 Toevoegen van Autocomplete
// klik-handler toevoegen aan vrienden div $ ("# vrienden"). klik (functie () // focus 'naar' veld $ ("# to"). focus ();); // live-handler toevoegen voor klikken op koppelingen verwijderen $ (". remove", document.getElementById ("vrienden")). live ("klik", functie () // huidige vriend verwijderen $ (this) .parent () .remove (); // juiste 'tot' veldpositie als ($ ("# vrienden span"). length === 0) $ ("# to"). css ("top", 0); );
Stap 5 Aanvullende code en bronnen
$ Row [ "naam"]); // echo JSON om pagina $ response = $ _GET ["callback"]. "(". json_encode ($ friends). ")"; echo $ antwoord; mysql_close ($ server); ?>