Autouzupełnianie w polach formularza. Odc.2.

jQuery Zostaw komentarz

Uzupełnianie innych pól

To co pokazałam w poprzednim odcinku było proste, prawda? A co jeśli chcemy, żeby wybranie pozycji z listy podpowiedzi spowodowało uzupełnienie innego pola <input/>, albo wypisanie jakiegoś komunikatu w wybranym miejscu? Na szczęście to też da się zrobić i nie jest bardzo trudne. Pierwsza modyfikacja to dodanie do formularza pola z kolejnym okienkiem <input/> oraz miejsca na komunikat. W tym celu miedzy dwa istniejące wiersze tabeli skonstruowanej w poprzednim odcinku wstawimy następujący kod:

  1.  <td> Grupa </td>
  2.  <td> <input type="text" name="grupa" id="grupa"> </td>
  3. </tr>
  4.  <td colspan="2" id="komunikat">&nbsp;</td>
  5. </tr>

W skrypcie generującym nasze podpowiedzi musimy nieco zmodyfikować wartości w tablicy:

  1. $dane = array('aparat|fotografia|hobby',
  2.   'motor|motoryzacja|hobby',
  3.   'rower|sport|rekreacja',
  4.   'samochód|motoryzacja|praca',
  5.   'telefon|telekomunikacja|praca',
  6.   'telewizor|RTV|hobby');

Zmianie uległy łańcuchy znaków do których dodałam nazwy grupy i informację dodatkową, które wykorzystamy do uzupełnienia dodatkowych pól. Istotne jest, aby te dodatkowe dane były w łańcuchu znaków oddzielone znakiem ‘|’. Autocomplete działa tak, że w oknie podpowiedzi wyświetli nam to co znajduje się przed pierwszym znakiem ‘|’ a do skryptu przekaże (zaraz powiem jak to odebrać) tablicę powstałą z podzielenia wybranego przez użytkownika stringu względem znaku ‘|’.

Aby wykorzystać te informacje należy użyć kolejnej funkcji pluginu Autocomplete, czyli result(), którą dodajemy poniżej wywołania funkcji autocomplete() wpisując następujący kod:

  1. $("input#urzadzenia").result(function(event,arr_urzadz,formatted){
  2.  if(arr_urzadz){
  3.   $("input#grupa").val(arr_urzadz[1]);
  4.   $("td#komunikat").html(arr_urzadz[2]);
  5.  }
  6. });

Funkcja result() odbiera dane po wybraniu przez użytkownika pozycji z podpowiedzi i wrzuca je do tablicy arr_urzadzenie. Jeśli ta tablica nie będzie pusta (a będzie, gdy użytkownik nie skorzysta i wpisze coś czego w podpowiedziach nie ma) odpowiednie pola tablicy zostaną wpisane do okienka <input/> o id=”grupa” oraz do komórki tabeli <td/> o id=”komunikat”. To demo pokazuje jak działa formularz po wprowadzeniu tej modyfikacji.

A co jeśli zmienimy zdanie? Czyszczenie dodatkowych pól

Wprowadzone zmiany spowodowały, że po wybraniu pozycji z listy podpowiedzi w wybranych miejscach zostały automatycznie wpisane dodatkowe informacje. Co jednak, gdy sie rozmyślimy i wybierzemy inną pozycję z podpowiedzi? Nic złego, po prostu informacje te zostaną podmienione na nowe. Jednak, kiedy się rozmyślimy i wpiszemy wartość spoza listy widocznej w podpowiedziach stare dane nie znikną (można to łatwo sprawdzić w poprzednim przykładzie) i to nam trochę psuje zabawę. Na szczęście jest i na to lekarstwo, które poznałam dzięki uprzejmości Robert Nodzewskiego, który długo i cierpliwie tłumaczył mi jak to jest z tym jQuery.

Funkcja result() jest wywoływana za każdym razem, gdy użytkownik wybierze pozycję z okna podpowiedzi. Można jednak ją wywołać nawet wtedy, gdy użytkownik z podpowiedzi nie skorzysta. Służy do tego funkcja search() podłączona do atrybutu onblur w następujący sposób:

  1. <input type="text" name="urzadzenia" id="urzadzenia" onblur="$('input#urzadzenia').search();">

Gdy w ten sposób zmodyfikujemy pole <input/> funkcja result() zostanie wywołana nawet jeśli użytkownik wpisze dane spoza listy, ale nie zostaną do niej przekazane żadne wartości. Trzeba więc się odpowiednio przygotować na tę okoliczność. W tym celu dodajemy w kodzie odpowiedni watrunek:

  1. $("input#urzadzenia").result(function(event,arr_urzadz,formatted){
  2.  if(arr_urzadz){
  3.   $("input#grupa").val(arr_urzadz[1]);
  4.   $("td#komunikat").html(arr_urzadz[2]);
  5.  }else{
  6.   $("input#grupa").val('');
  7.   $("td#komunikat").html('wybrano wartość spoza listy');  
  8.  }
  9. });

No i proszę bardzo, już działa o czym można się przekonać uruchamiając to demo

Poleć wpis na:

  • Facebook
  • Technorati
  • Wykop

Podobne artykuły:

  1. Autouzupełnianie w polach formularza. Odc.3.
  2. Autouzupełnianie w polach formularza. Odc.1.

Komentarze (4) do “Autouzupełnianie w polach formularza. Odc.2.”

  1. eL. Says:

    Twoj przyklad nie dziala.. a przynajmniej jego uzupelnienie (to z czyszczeniem)
    z przyczyn dosc oczywistych: arr_urzadz zawsze bedzie posiadal jakas wartosc (chociazby “urzadzenie spoza listy”), dlatego warunek zawsze bedzie spelniony.

    nalezy w warunku wstawic arr_urzadz[1], co zapewnia nam sprawdzanie czy podalismy conajmniej dwa argumenty w tabeli (w js tabela indeksowana jest od 0).

    czyli nalezy umiescic: if(arr_urzadz[1]) { … } else { … }, aby warunek w naszym przypadku byl “sprawdzalny”.

  2. Joanna Says:

    Masz rację. Małe niedopatrzenie :)

  3. johny-max Says:

    A ja sie nie zgodze…

  4. Joanna Says:

    Przepraszam, a z czym się nie zgadzasz? :P

Zostaw komentarz

Silnik: Wordpress - Theme autorstwa N.Design Studio. Spolszczenie: Adam Klimowski.
RSS wpisów RSS komentarzy Zaloguj się