Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Modyfikacja - powiązane pola POMOC
Forum PHP.pl > Forum > XML, AJAX
nandrzejn
Witam

Chciałbym wykorzystać w swoim serwisie powiązane pola wyboru, które opisano : http://php.rk.edu.pl/w/p/powizane-pola-sel...zystujce-ajaxa/

Wykorzystałem ostatni przykład wykorzystujący odczyt z bazy danych
czyli:
index.php
  1. <?PHP
  2. header('Content-Type: text/html; charset=utf-8');
  3. ?>
  4. <script type="text/javascript" src="ajax.js"></script>
  5. <script type="text/javascript">
  6. var ajax = new sack();
  7.  
  8. function getCityList(sel)
  9. {
  10. var countryCode = sel.options[sel.selectedIndex].value;
  11. document.getElementById('dhtmlgoodies_city').options.length = 0; // Empty city select box
  12. if(countryCode.length>0){
  13. ajax.requestFile = 'getCities.php?countryCode='+countryCode; // Specifying which file to get
  14. ajax.onCompletion = createCities; // Specify function that will be executed after file has been found
  15. ajax.runAJAX(); // Execute AJAX function
  16. }
  17. }
  18.  
  19. function createCities()
  20. {
  21. var obj = document.getElementById('dhtmlgoodies_city');
  22. eval(ajax.response); // Executing the response from Ajax as Javascript code
  23. }
  24.  
  25.  
  26. </script>
  27. <form action="" method="post">
  28. <table>
  29. <tr>
  30. <td>Country: </td>
  31. <td><select id="dhtmlgoodies_country" name="dhtmlgoodies_country" onchange="getCityList(this)">
  32. <option value="">Wybierz</option>
  33. <?PHP
  34. include 'mysql.class.php';
  35. $a = new mysql_db();
  36. $a->connect('localhost', 'root', '', 'test2');
  37. $q = $a->query_select("SELECT id, nazwa FROM kategorie WHERE parent_cat = 0");
  38. foreach($q as $i)
  39. {
  40. echo '<option value="'.$i['id'].'">'.$i['nazwa'].'</option>';
  41. }
  42. $a->destruct();
  43. ?>
  44. </select>
  45. </td>
  46. </tr>
  47. <tr>
  48. <td>City: </td>
  49. <td><select id="dhtmlgoodies_city" name="dhtmlgoodies_city">
  50.  
  51. </select>
  52. </td>
  53. </tr>
  54. </table>
  55. </form>


oraz

getCities.php:
  1. <?php
  2. header('Content-Type: text/html; charset=utf-8');
  3. if(isset($_GET['countryCode']))
  4. {
  5. include 'mysql.class.php';
  6. $a = new mysql_db();
  7. $a->connect('localhost', 'root', '', 'test2');
  8. $q = $a->query_select("SELECT id, nazwa FROM kategorie WHERE parent_cat = '".mysql_real_escape_string($_GET['countryCode'])."'");
  9. foreach($q as $i)
  10. {
  11. echo "obj.options[obj.options.length] = new Option('".$i['nazwa']."','".$i['id']."');
  12. ";
  13. }
  14. $a->destruct();
  15. }
  16. ?>



Wszystko po przystosowaniu mojej bazy działa pięknie, tylko moje potrzeby są troszeczke większe, a mianowicie uzależnienie kilku pól. Potrzebuje wybór kraju, na jego podstawie wybór województwa, na jego podstawie wybór powiatu, dalej gminy, dalej miasta itd.

Zrobiłem powiązanie 1 pola z 2 i drugiego z 3 tak na próbe, czyli kraj-województwo-powiat.

Działa dobrze, tylko jest mała wiewygoda. Gdy wybiorę w kolejności kraj-województwo-powiat (chodzi o polskę) wszystko się załaduje i ok ale jak po takim wybraniu chcę zmienić kraj, to 2 pole zachowuje się poprawnie, natomiast w trzecim nadal widnieją poprzednio wprowadzone powiaty (polskie).

Jak ten problem rozwiązać, aby wszystkie pola po wyborze i modyfikacji zachowywały sie poprawnie.



Kolejnym innym moim zapytaniem dotyczącym tego samego wątku jest wczytywanie całego pola wyboru, czyli na stronie widnieje wybór krajów - wybieram powiedzmy Polskę i po wybraniu wczytuje się nowa komórka, a mianowicie pole wyboru województwa i po jego wybraniu pojawia się nowa komórka z polem wyboru powiatu itd. Pamiętając o tym, co juz opisałem wyżej, że jak zmienię kraj komórki się odpowiednio zachowują, czyli przy tym rozwiązaniu znikają.

Prościej nie udało mi się opisać. Z góry dziekuję za odpowiedzi.
box3r
Z kazda zmiana kraju musisz resetowac inne selecty. (removeChild) - najlepiej diva w ktorym sie dany select pojawia.

Kod
function reset_obj(obj)
{
if(obj!= null && obj.hasChildNodes())
    {
     for(var i=0; i <obj.childNodes.length;i++)
        obj.removeChild(obj.firstChild);
    }
}


Tu kod tworzący - zwróc uwage ze przy tworzeniu jest najpierw reset

Kod
function create_sel(xml_doc,sel_dest,sel_id)
{
form_dest = document.getElementById("jakis_div");  

//alert(form_dest.childNodes.length +"el:"+form_dest.elements.length);
//if(form_dest.childNodes[1])
//alert(form_dest.childNodes[1]);

var data_note;


  if(xml_doc.hasChildNodes())
   {
    
    sel = document.createElement("select");
    sel.setAttribute("class","sel_class");
    sel.setAttribute("id",sel_id);
    sel.setAttribute("name",sel_id);
    sel_dest.appendChild(sel);
    
    opt = null;
    reset_obj(sel_dest);            
    
            
    
    opt_child = xml_doc.getElementsByTagName("res_option");
    
    
    
        for(var i = 0;i < opt_child.length;i++)
         {
          
          dsvalue = opt_child.item(i).childNodes[0].firstChild.data; dstext = opt_child.item(i).childNodes[1].firstChild.data
          opt = document.createElement("option");
              opt.setAttribute("value",dsvalue);
          if(i==0) opt.setAttribute("selected",true);
          opt.appendChild(document.createTextNode(dstext));
          sel.appendChild(opt);
        }
    
     sel = sel.cloneNode(true);
     form_dest.appendChild(sel);


   }
   else sel_dest.style.display="none"

}


Pozniej za kazda zmiana kraju tworzysz od nowa selecty w divach i wrzucasz dane do selecta. To rozwiazuje 2 problem - czyli jak cos zmienisz to znika. Jezeli chcesz zeby 3 select znikal a 2 zostal bo cos tam - to wiadomo jakies parametry musisz dolozyc
nandrzejn
Dzięki za odpowiedź. Problem w tym, że w ogóle nie mam szerszego pojecia co mam z tym zrobić, gdzie wstawić jak wywołać itd.. W tej kwesti jestem zielony. Prosiłbym o przedstawienie tego w takiej formie, aby już bez grzebania w kodzie wstawić i patrzeć na efekty. Powiem wręcz, że licze na gotowca, za którego z góry dziękuję.
box3r
he he chyba forum sluzy do tego zeby pomagac a nie pisac za kogos winksmiley.jpg - powodzenia
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.