Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [jquery] suggest/autocomplete skrypt
kicaj
post
Post #1





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
krowal
post
Post #2





Grupa: Zarejestrowani
Postów: 561
Pomógł: 72
Dołączył: 15.11.2006

Ostrzeżenie: (0%)
-----


Zamiast keypress użyj keyup. Keypress w jQuery trochę potrafi zmylić (IMG:style_emoticons/default/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ć.
Go to the top of the page
+Quote Post
kicaj
post
Post #3





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

Ostrzeżenie: (0%)
-----


Rzeczywiscie. Napisalem kod, ktory wywoluje w inpucie przy uzyciu keyPress alert i rzeczywiscie jest "jakby" przed wpisaniem znaku.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 17:58