Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jquery] suggest/autocomplete skrypt
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
kicaj
Napisalem skrypt dzialajacy na zasadzie podpowiedzi (suggest, autocomplete), które działa prawidłowo:
  1. <script type="text/javascript">
  2. $(document).keypress(function(e){
  3. $('#search').val($('#search').val().replace(/[^a-z]/, ''));
  4.  
  5. $.post('source.php', {queryString: ""+$('#search').val()+""}, function(data) {
  6. if (data.length > 0) {
  7. $('#suggest').show().html(data);
  8. }
  9. });
  10. });
  11.  
  12. var arr = new Array();
  13.  
  14. $(document).keydown(function(e){
  15. var $hlight = $('#suggest li.hlight'), $el = $('#suggest li');
  16.  
  17. if (e.keyCode == 40) {
  18. $hlight.removeClass('hlight').next().addClass('hlight');
  19.  
  20. if ($hlight.next().length == 0) {
  21. $el.eq(0).addClass('hlight')
  22. }
  23.  
  24. $('#search').val($('li.hlight').text());
  25.  
  26. } else if (e.keyCode === 38) {
  27. $hlight.removeClass('hlight').prev().addClass('hlight');
  28.  
  29. if ($hlight.prev().length == 0) {
  30. $el.eq(-1).addClass('hlight');
  31. }
  32.  
  33. $('#search]').val($('li.hlight').text());
  34. }
  35.  
  36.  
  37. if ((e.keyCode == 13 || e.keyCode == 188) && $('#search').val().length > 0) {
  38. if (arr.indexOf($('#search').val()) === -1) {
  39. $('#search').val($('#search').val().replace(/\,/i, ''));
  40.  
  41. arr.push($('#search').val());
  42. }
  43.  
  44. $('#search').val('');
  45. $('#suggest').hide();
  46.  
  47. }
  48.  
  49. $('#tags').html(''+arr);
  50. });
  51. </script>

...z jednym wyjatkiem.
Działa na takie zasadzie, ze jesli wpisze 'an' powinno mi wyszukac "poland", "holland", "andora" itd. a wyszukuje wszystkie wyrazy w ktorych wystepuje "a".
Nastepnie jak wpisze 'and', wyszykuje mi wszystkie wyrazy z 'an'
Nie wiem w czym problem. Samo zapytanie do bazy jest na zasadzie LIKE "'%'.$queryString.'$'".
Problem tkwi prawdopodobnie w funkcjach js keyPress/Up/Down, ale nie jestem pewien czy napewno to to.
krowal
Zamiast keypress użyj keyup. Keypress w jQuery trochę potrafi zmylić smile.gif Chodzi o to że ten event teoretycznie powinien zostać wywołany po dwóch zdarzeniach występujących razem: keydown/keyup ale z inputami jest o tyle dziwnie, że to zdarzenie wywoływane jest jeszcze przed wstawieniem wciśniętego klawisza do value danego pola i dlatego skraca ci szukany ciąg o ostatnio wpisaną literę. Zamiana na keyup powinna to naprawić.
kicaj
Rzeczywiscie. Napisalem kod, ktory wywoluje w inpucie przy uzyciu keyPress alert i rzeczywiscie jest "jakby" przed wpisaniem znaku.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.