Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: combo select
Forum PHP.pl > Forum > XML, AJAX
usb
WItam. Mam dla twardzieli twardy orzech do zgryzienia. Mam oto taki kod js:

  1. <script language="JavaScript" type="text/javascript">
  2. <!--
  3.  
  4. // first combo box
  5.  
  6. data_1 = new Option("1", "$");
  7. data_2 = new Option("2", "$$");
  8.  
  9. // second combo box
  10.  
  11. data_1_1 = new Option("11", "-");
  12. data_1_2 = new Option("12", "-");
  13. data_2_1 = new Option("21", "--");
  14. data_2_2 = new Option("22", "--");
  15. data_2_3 = new Option("23", "--");
  16. data_2_4 = new Option("24", "--");
  17. data_2_5 = new Option("25", "--");
  18.  
  19. // third combo box
  20.  
  21. data_1_1_1 = new Option("111", "*");
  22. data_1_1_2 = new Option("112", "*");
  23. data_1_1_3 = new Option("113", "*");
  24. data_1_2_1 = new Option("121", "*");
  25. data_1_2_2 = new Option("122", "*");
  26. data_1_2_3 = new Option("123", "*");
  27. data_1_2_4 = new Option("124", "*");
  28. data_2_1_1 = new Option("211", "**");
  29. data_2_1_2 = new Option("212", "**");
  30. data_2_2_1 = new Option("221", "**");
  31. data_2_2_2 = new Option("222", "**");
  32. data_2_3_1 = new Option("231", "***");
  33. data_2_3_2 = new Option("232", "***");
  34.  
  35. // fourth combo box
  36.  
  37. data_2_2_1_1 = new Option("2211","%")
  38. data_2_2_1_2 = new Option("2212","%%")
  39.  
  40. // other parameters
  41.  
  42. displaywhenempty=""
  43. valuewhenempty=-1
  44.  
  45. displaywhennotempty="-select-"
  46. valuewhennotempty=0
  47.  
  48.  
  49. function change(currentbox) {
  50. numb = currentbox.id.split("_");
  51. currentbox = numb[1];
  52.  
  53. i=parseInt(currentbox)+1
  54.  
  55. // I empty all combo boxes following the current one
  56.  
  57. while ((eval("typeof(document.getElementById(\"combo_"+i+"\"))!='undefined'")) &&
  58. (document.getElementById("combo_"+i)!=null)) {
  59. son = document.getElementById("combo_"+i);
  60. // I empty all options except the first one (it isn't allowed)
  61. for (m=son.options.length-1;m>0;m--) son.options[m]=null;
  62. // I reset the first option
  63. son.options[0]=new Option(displaywhenempty,valuewhenempty)
  64. i=i+1
  65. }
  66.  
  67.  
  68. // now I create the string with the "base" name ("stringa"), ie. "data_1_0"
  69. // to which I'll add _0,_1,_2,_3 etc to obtain the name of the combo box to fill
  70.  
  71. stringa='data'
  72. i=0
  73. while ((eval("typeof(document.getElementById(\"combo_"+i+"\"))!='undefined'")) &&
  74. (document.getElementById("combo_"+i)!=null)) {
  75. eval("stringa=stringa+'_'+document.getElementById(\"combo_"+i+"\").selectedIndex")
  76. if (i==currentbox) break;
  77. i=i+1
  78. }
  79.  
  80.  
  81. // filling the "son" combo (if exists)
  82.  
  83. following=parseInt(currentbox)+1
  84.  
  85. if ((eval("typeof(document.getElementById(\"combo_"+following+"\"))!='undefined'")) &&
  86. (document.getElementById("combo_"+following)!=null)) {
  87. son = document.getElementById("combo_"+following);
  88. stringa=stringa+"_"
  89. i=0
  90. while ((eval("typeof("+stringa+i+")!='undefined'")) || (i==0)) {
  91.  
  92. // if there are no options, I empty the first option of the "son" combo
  93. // otherwise I put "-select-" in it
  94.  
  95. if ((i==0) && eval("typeof("+stringa+"0)=='undefined'"))
  96. if (eval("typeof("+stringa+"1)=='undefined'"))
  97. eval("son.options[0]=new Option(displaywhenempty,valuewhenempty)")
  98. else
  99. eval("son.options[0]=new Option(displaywhennotempty,valuewhennotempty)")
  100. else
  101. eval("son.options["+i+"]=new Option("+stringa+i+".text,"+stringa+i+".value)")
  102. i=i+1
  103. }
  104. //son.focus()
  105. i=1
  106. combostatus=''
  107. cstatus=stringa.split("_")
  108. while (cstatus[i]!=null) {
  109. combostatus=combostatus+cstatus[i]
  110. i=i+1
  111. }
  112. return combostatus;
  113. }
  114. }
  115.  
  116. //-->
  117. </script>


Skrypt działą jak należy. Tzn. mamy pierwsza liste, wybieramy jakąś opcje i zależnie co wybralismy pojawiaja się nowe opcje w drugiej liście potem trzecia. Problem polega na tym jeżeli na stronie głownej mam zwykły tekst(linki z GETem) z wypisanymi głownymi kategoriami i po kliknieciu chcialbym zeby przeszla na strone z w/w kodem i odrazu zaznaczylo kat głowną z podporzadkowana do niej drugą listą.

Przesyłam dane np. w GET ale potem co? Jak zrobić żeby na dzień dobry bez kliknięć pokazało podrzedną listę wybranej wcześniej na stronie głownej kategorii.

Jakieś pomysły?

proszę przenieść wątek do działu po stronie przeglądarki
askone
Hej

Wydaje mi się, iż rozwiązaniem będzie wywołanie po załadowaniu strony eventu onchange() dla pierwszego "select". Reszta ustawi się łańcuchowo...

Pozdro
usb
Też tak myślałem ale ja z JS to noga jestem.

Czyli leci GET z ID kategorią na stronę docelową i co? Jak zrobić żeby przekazać/wywołąc onchange dla pierwszego select po stronie JS?
askone
GetElementById('tutajId').onchange();


Ale uprzedzam, że mogą być błędy... JS to też nie moja mocna strona winksmiley.jpg
usb
Może się przyda , formularz do skryptu:

  1. <select name="combo0" id="combo_0" onChange="change(this);" style="width:200px;">
  2. <option value="value1">-select-</option>
  3. <option value="value2">1</option>
  4. <option value="value3">2</option>
  5.  
  6. <BR><BR>
  7. <select name="combo1" id="combo_1" onChange="change(this)" style="width:200px;">
  8. <option value="value1"> </option>
  9. <BR><BR>
  10. <select name="combo2" id="combo_2" onChange="change(this);" style="width:200px;">
  11. <option value="value1"> </option>
  12. <BR><BR>
  13. <select name="combo3" id="combo_3" onChange="change(this);" style="width:200px;">
  14. <option value="value1"> </option>
  15.  
  16.  
  17. </form>


czyli coś taiego:

GetElementById('<? echo $_GET[' id_kategorii' ]?>').onchange(); questionmark.gif
i wywołąc ją w body onload czy jak?

Zauważ że ID jest przypisane do select czyli obiektu nie do poszczególnych opcji, czy można zmienić w/w skrypt i dac funkcje onchange przy samych opcjach? Czy coś modze tongue.gif

funkcja onchange działa w momencie zmiany wyboru opcji zgadza sie? To w taki razie jak zaznaczyć opcję przy załądowaniu świeżo strony aby onchange załąpało?
----------------------

Wykombinowałem takie coś:
  1. function zmien() {
  2. if ("ok" == "<? echo $_GET['id']; ?>") {
  3. document.form1.combo0[1].selected = "1"
  4. }
  5. }


Wywołanie funkcji w onload w body i działa, jeżeli ID jest róne coś tam to zaznacza głowną kategorie która chce tylko problem jest taki że podrzedna kat sie nie pojawia. Czyli nie łapie tego chwytu onchange?? jakieś pomysły??

OK UDAŁO SIE biggrin.gif

oto prawidłowa funkcja w onload:

  1. function zmien() {
  2. if ("ok" == "<? echo $_GET['id']; ?>") {
  3. document.form1.combo0[1].selected = "1"
  4. change(document.form1.combo0);
  5. }
  6. }


Czyli wywołałem funkcje change zaraz po zaznaczeniu opcji. Onchange dziala przy integracji uzytkownika i wywolywalo wtedy docelowa f. change. proste smile.gif

Dzięki fly474 za podsuniecie pomyslu . pozdro
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.