2011-09-10 13 views
5

śledzenie dokumentacji z witryny interfejsu użytkownika i przeglądanie kilku tutoriali i sprawdzenie, czy mój kod działa, a ajax znajduje się na liście terminów, które chcę, i możesz wybrać jedną z nich i umieszcza wartość, a następnie ",". Jednak później nie monituje ponownie o drugą wartość.Autouzupełnianie jQuery z wieloma wartościami ajax'owymi

Ponadto, gdy wprowadzam częściowe i mówię, że 10 pozycji pojawia się, tabulacja po prostu przechodzi do następnego pola formularza, nie wiem, co jest nie tak z moim .indy, może ustawienie? Jeśli ktokolwiek nie miałby nic przeciwko spojrzeniu, byłoby to bardzo cenne!

function split(val) { 
      return val.split(/,\s*/); 
     } 

     function extractLast(term) { 
      return split(term).pop(); 
     } 

     jQuery('#tagSearch') 
      .bind('keydown', function(event) { 
        if (event.keyCode === jQuery.ui.keyCode.TAB && 
         jQuery(this).data('autocomplete').menu.active) { 
          event.preventDefault(); 
        } 
      }) 
      .autocomplete({ 
       autoFocus: true, 
       source: function(request, add) { 
        console.log('source'); 
        jQuery.getJSON('/get-tags-like.php?term_start=' + request.term, function(response) { 
         var possibleTerms = []; 

         jQuery.each(response, function(i, val) { 
          possibleTerms.push(val.name + ' ' + '(' + val.count + ')'); 
         }); 

         add(jQuery.map(possibleTerms, function(item) { 
          console.log(possibleTerms); 
          return item; 
         }));   
        }); 
       }, 
       focus: function() { 
        console.log('focus'); 
       return false; 
       }, 
       select: function(event, ui) { 
        console.log('select'); 
        var terms = split(this.value); 

        terms.pop(); 

        terms.push(ui.item.value); 

        terms.push(''); 

        this.value = terms.join(','); 

        // At this point, example: 
        // Sony (5) 
       var currentVal = this.value; 

        // Sony (5) - Gets inserted as "Sony" 
        currentVal = currentVal.replace(/\s\(.\)/, ''); 

        this.value = currentVal; 

        return false; 
       }, 
       minLength: 2 
      }); 
+0

Czy powiązanie zdarzenia klucza zdarzenia z autouzupełni ą przeszkodzi w Twoim? –

Odpowiedz

1

Jednak potem to nie zapyta ponownie do drugiej wartości.

Upewnij się, że piszesz więcej niż 2 znaki. Funkcja przekazane search uniemożliwia wyszukiwanie z mniej niż dwóch znaków od powodując wyszukiwania:

search: function() { 
     var term = extractLast(this.value); 

     if (term.length < 2) { 
      return false; 
     } 
}, 

Również, gdy wchodzę częściowy i powiedzmy 10 wpisy pop-up, tabulatorem po prostu idzie do w następnym polu formularza, nie jestem pewien, co jest nie tak z moim .bind, być może ustawienie?

bind na początku stara się uniemożliwić użytkownikowi tabbing z pola gdy kandydat autouzupełnianie jest podświetlona. Przy autouzupełnianiu pojedynczej wartości zwykle nie stanowi to problemu, ponieważ najpierw wybrana jest pozycja menu, umieszczona w numerze input, a następnie fokus zostaje utracony.

Zmienia się, gdy chcesz uzyskać wiele wartości w input. Chcemy zatrzymać domyślną akcję z keydown, która zmienia fokus na następne pole wejściowe.

autocomplete ma opcję autoFocus, która przyda się tutaj. Zapewni to, że kandydat zostanie wybrany jako zawsze wybrany, gdy użytkownik kliknie kartę po wpisaniu.

Nie jestem w stanie dokładnie odtworzyć Twojej sytuacji, ale stworzyłem demo, które nie wykazuje żadnego z problemów, których doświadczasz (jedyne, co naprawdę zrobiłem, to zmienić źródło i dodać autoFocus opcja): http://jsfiddle.net/zTVKC/

+0

Dzięki! Nadal nie działa, ale twój jsfiddle dał mi wiele wglądu, nie mogłem uzyskać działania ajax w ogóle bez użycia getJSON. Teraz zauważyłem, po pierwszym wpisie, robi wywołanie ajax dla drugiego i pobiera obiekt, ale nie dodaje lub wypełnić listy rozwijanej: - /. Całkowicie usunąłem funkcję wyszukiwania, aby pozbyć się tej możliwości. –

+1

@John: Interesujące ... Czy tego właśnie szukasz? Jeśli wyszukasz tę samą rzecz dwukrotnie (która powinna zwrócić te same wyniki), czy to ma znaczenie? –

+0

Nie, zawsze to samo, dostaje wyniki i nie wyświetla ich po 1 wyniku. Mogę usunąć wszystko i zacząć od zera, i znowu działa na pierwszy, a nie na drugi. Musiałem mieć coś popsutego z ogranicznikiem przecinka, jak przypuszczam. – user652650

Powiązane problemy