Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [js] wartości selectu po wybraniu pierwszego
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
KCG
Chciałbym, aby po wybraniu wartości z pierwszej listy (ubrania, buty itp.) dwie następne uzupełniały się odpowiednimi kategoriami i producentami (buty np. zimowe, letnie; ubrania np. spodnie, bluzy). Poniżej kod generowany przez php. Jeśli usunę pętlę generującą elementy tablicy prod i prod_id, to pierwsza lista wypełnia się kategoriami, w drugą stronę to nie działa. Coś jest nie tak, czego nie dostrzegłem?
  1. function zamianau(kat) {
  2. var cat1 = new Array();
  3. var cat_id1 = new Array();
  4. cat1[0] = 'Enduro';
  5. cat_id1[0] = 8;
  6. cat1[1] = 'Integralny';
  7. cat_id1[1] = 6;
  8. cat1[2] = 'Okulary i szyby';
  9. cat_id1[2] = 9;
  10. cat1[3] = 'Otwarty';
  11. cat_id1[3] = 7;
  12. cat1[4] = 'Otwierany';
  13. cat_id1[4] = 5;
  14. cat1[5] = 'Pozosta?e';
  15. cat_id1[5] = 10;
  16. var prod1 = new Array();
  17. var prod_id1 = new Array();
  18. prod1[0] = 'AGV';
  19. prod_id1[0] = 1;
  20. prod1[1] = 'Airoh';
  21. prod_id1[1] = 2;
  22. prod1[2] = 'Alpina';
  23. prod_id1[2] = 3;
  24. prod1[3] = 'Apache';
  25. prod_id1[3] = 4;
  26. prod1[4] = 'Arai';
  27. prod_id1[4] = 5;
  28. prod1[5] = 'Aviator';
  29. prod_id1[5] = 6;
  30. (...)
  31. prod1[74] = 'WSGG';
  32. prod_id1[74] = 74;
  33. prod1[75] = 'Wulf';
  34. prod_id1[75] = 75;
  35. prod1[76] = 'X Speed';
  36. prod_id1[76] = 78;
  37. prod1[77] = 'X-Lite';
  38. prod_id1[77] = 77;
  39. prod1[78] = 'X1';
  40. prod_id1[78] = 76;
  41. prod1[79] = 'Zeal';
  42. prod_id1[79] = 79;
  43. if (kat == 1) {
  44. var dlugosc = cat1.length-1;
  45. document.add.elements.catb.options.length = cat1.length;
  46. for (var i=0; i <= dlugosc; i++) {
  47. document.add.catb.options[i] = new Option(cat1[i]);
  48. document.add.catb.options[i].value = cat_id1[i];
  49. }
  50. var dlugosc = prod1.length-1;
  51. document.add.elements.producent.options.length = prod1.length;
  52. for (var i=0; i <= dlugosc; i++) {
  53. document.add.producent.options[i] = new Option(prod1[i]);
  54. document.add.producent.options[i].value = prod_id1[i];
  55. }
  56. }


Doszedłem, że tablice prod i prod_id mogą mieć maksymalnie 26 elementów. Czemu? (znaczy wygenerowanych w pętli może być 26 elementów, jak na sztywno dodam jeszcze kilka to też jest ok)
kurt
Na wstępnie, brakuje mi tu klucza, wiążącego produkt z kategorią.
czemu nie stosujesz tablic wielowymiarowych, a przechowujesz id i nazwę w dwóch różnych? trochę to dziwnie wygląda.
KCG
Wszystko działa, no faktycznie może lepiej zastosować tablicę wielowymiarową.
Jest coś takiego, że jak w zapytaniu do bazy dam 'LIMIT 26' to jest ok, a np. 27 i więcej to już nie działa. Znowu jeśli ręcznie dodałem następne elementy (27,28,29...) to się wyświetlały i ogólnie działało. Więc o co chodzi?

Mógłbyś mi podać mniej więcej, jak to z tablicami wielowymiarowymi by było? Bo jakoś mi nie wyszło.
kurt
to normale jak dasz "limit 26" w zapytaniu to nie pobierzesz więcej niż 26 rekordów.
co do tabel wielowymiarowych to po prostu:
  1. var produkty = new Array()
  2. var i
  3.  
  4. ' pętla z i
  5. produkty[i] = new Array()
  6. produkty[i][0] = id ' id produktu
  7. produkty[i][1] = cat ' kategoria
  8. produkty[i][2] = nazwa ' wiadomo
  9.  
  10. ' koniec pętli...
  11.  


coś w tym stylu winksmiley.jpg
KCG
Wiem, na czym LIMIT polega :] Chodzi o to, że jak dam więcej niż 26 w LIMIT zapytania do bazy (php), to caly skrypt JS nie działa... W źródle wyglada wszystko ok, no ale nie działa;/
A taka tablic może być: prod[$id]['id'][i] ? (i z pętli js, a $id z php)
kurt
Jak chcesz połączyć JS z PHP to chyba najlepiej "oblecz" JS w php. Łatwej jest wtedy przekazywać zmienne php do JS
  1. <?php
  2. print "<script type='text/javascript'><!--\n";
  3. print "var produkty = new Array()";
  4. print "var i";
  5.  
  6. // itd, itd
  7. ?>


zresztą masz tu link, gdzie sposób ten jest opisany:
http://www.poradnik-webmastera.com/artykul..._javascript.php

co do tego obcinania selecta przy 26 to najlepiej wklej cały skrypt. Po tym co napisałeś w pierwszym poście niewiele się można zorientować.
KCG
  1. function zamianau(kat) {
  2. <?php
  3. $sql1 = 'SELECT `ubrania_category_id` FROM `ubrania_category` WHERE `ubrania_category_pid
    `=0'
    ;
  4. $res1 = $mysql->query($sql1);
  5. while ($cat = $mysql->fetch_array($res1)) {
  6. echo 'var cat'.$cat['ubrania_category_id'].' = new Array();'."\n";
  7. echo 'var cat_id'.$cat['ubrania_category_id'].' = new Array();'."\n";
  8. $sql2 = 'SELECT * FROM `ubrania_category` WHERE `ubrania_category_pid`='.$cat['ubrania_category_id'].' ORDER BY `ubrania_category_name` ASC';
  9. $res2 = $mysql->query($sql2);
  10. $i = 0;
  11. while ($cat2 = $mysql->fetch_array($res2)) {
  12.  echo 'cat'.$cat['ubrania_category_id'].'['.$i.'] = ''.$cat2['ubrania_category_name'].'';'."\n";
  13. echo 'cat_id'.$cat['ubrania_category_id'].'['.$i.'] = '.$cat2['ubrania_category_id'].';'."\n";
  14. $i++;
  15. }
  16. echo 'var prod'.$cat['ubrania_category_id'].' = new Array();'."\n";
  17. echo 'var prod_id'.$cat['ubrania_category_id'].' = new Array();'."\n";
  18.  $sql3 = 'SELECT * FROM `ubrania_producenci` WHERE `ubrania_producenci_pid`='.$cat['ubrania_category_id'].' ORDER BY `ubrania_producenci_name` ASC LIMIT 26';
  19. $res3 = $mysql->query($sql3);
  20. $i = 0;
  21. while ($prod = $mysql->fetch_array($res3)) {
  22. echo 'prod'.$cat['ubrania_category_id'].'['.$i.'] = ''.$prod['ubrania_producenci_name'].'';'."\n";
  23. echo 'prod_id'.$cat['ubrania_category_id'].'['.$i.'] = '.$prod['ubrania_producenci_id'].';'."\n";
  24. $i++;
  25.  }
  26. echo 'var size'.$cat['ubrania_category_id'].' = new Array();'."\n";
  27. echo 'var size_id'.$cat['ubrania_category_id'].' = new Array();'."\n";
  28. $sql4 = 'SELECT * FROM `ubrania_rozmiary` WHERE `ubrania_rozmiary_pid`='.$cat['ubrania_category_id'].' ORDER BY `ubrania_rozmiary_id` ASC';
  29. $res4 = $mysql->query($sql4);
  30. $i = 0;
  31. while ($roz = $mysql->fetch_array($res4)) {
  32. echo 'size'.$cat['ubrania_category_id'].'['.$i.'] = ''.$roz['ubrania_rozmiary_roz'].'';'."\n";
  33. echo 'size_id'.$cat['ubrania_category_id'].'['.$i.'] = ''.$roz['ubrania_rozmiary_id'].'';'."\n";
  34. $i++;
  35.  }
  36.  
  37. echo 'if (kat == '.$cat['ubrania_category_id'].') {'."\n";
  38. echo ' var dlugosc = cat'.$cat['ubrania_category_id'].'.length-1;'."\n";
  39. echo ' document.add.elements.catb.options.length = cat'.$cat['ubrania_category_id'].'.length;'."\n";
  40. echo ' for (var i=0; i <= dlugosc; i++) {'."\n";
  41. echo ' document.add.catb.options[i] = new Option(cat'.$cat['ubrania_category_id'].'[i]);'."\n";
  42. echo ' document.add.catb.options[i].value = cat_id'.$cat['ubrania_category_id'].'[i];'."\n";
  43. echo ' }'."\n";
  44. echo ' var dlugosc = prod'.$cat['ubrania_category_id'].'.length-1;'."\n";
  45. echo ' document.add.elements.producent.options.length = prod'.$cat['ubrania_category_id'].'.length;'."\n";
  46. echo ' for (var i=0; i <= dlugosc; i++) {'."\n";
  47. echo ' document.add.producent.options[i] = new Option(prod'.$cat['ubrania_category_id'].'[i]);'."\n";
  48. echo ' document.add.producent.options[i].value = prod_id'.$cat['ubrania_category_id'].'[i];'."\n";
  49. echo ' }'."\n";
  50. echo ' var dlugosc = size'.$cat['ubrania_category_id'].'.length-1;'."\n";
  51. echo ' document.add.elements.rozmiar.options.length = size'.$cat['ubrania_category_id'].'.length;'."\n";
  52. echo ' for (var i=0; i <= dlugosc; i++) {'."\n";
  53. echo ' document.add.rozmiar.options[i] = new Option(size'.$cat['ubrania_category_id'].'[i]);'."\n";
  54. echo ' document.add.rozmiar.options[i].value = size_id'.$cat['ubrania_category_id'].'[i];'."\n";
  55. echo ' }'."\n";
  56. echo '}'."\n";
  57. }
  58. ?>
  59. }

Czyli coś jakby było w okolicach $sql3.

Naprawdę nikt nie wie?
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.