Autor Zpráva
Patrik C.
Profil *
Dobrý den, použím chained select (několik selectů na sobě zavislých) vše mě funguje jak má.

Zvolím kraj a z databáze se mě do dalšího selectu zvolí okresy, který zvolný kraj má... Jenže problém nastává v tom, když v select menu v krajích zvolím natvrdo třeba Jihomoravský kraj jako selected, tak se mě již okresy nevypíšou. Prostě nevím kde je chyba, znalost JS u mě není dobrá, takže bych byl rád za nějakou vaši radu.

HTML:
<select id="kraj" name="kraj" class="levevyhledavani"><option value="">Nerozhoduje</option><option value="1">Jihočeský</option><option value="2" selected="selected">Jihomoravský</option><option value="3">Karlovarský</option><option value="4">Královehradecký</option><option value="5">Liberecký</option><option value="6">Moravskoslezký</option><option value="7">Olomoucký</option><option value="8">Pardubický</option><option value="9">Plzeňský</option><option value="10">Praha</option><option value="11">Středočeský</option><option value="12">Ústecký</option><option value="13">Vysočina</option><option value="14">Zlínský</option></select>

<select id="okres" name="okres" class="levevyhledavani"><option value="">Vyberte kraj</option></select>


JS:
$('#kraj').change(function(e){
          var kraj = $('#kraj option:selected').val();
          if(kraj>0) {
              $.get('funkce/ajax2.php?kraj='+kraj, function(data){
                  $('#okres').show().html(data); 
              });
          }

    });


PHP:
if(isset($kraj))
{
  $result = mysql_query("SELECT DISTINCT id,nazev,typ FROM web_okres WHERE typ='$kraj' ORDER by nazev ASC") 
  or die(mysql_error());
  echo '<option value="">Nerozhoduje</option>';
  while($text = mysql_fetch_array( $result )) 
  {
  echo '<option value="'.$text['id'].'">'.$text['nazev'].'</option>';
  }
}



Děkuji předem za Vaše rady
sysel
Profil
Milý Patriku C.

na webu Českého statistického úřadu lze nalézt platné číselníky, já jsem už asi dva roky neaktulisoval takže čísla nemusejí sedět. Číselník zahrnuje oblasti, kraje, okresy, obce s rozšířenou pravomocí a obecní úřady pověřené. Svůj PHP kód proto neuvádím, ale ten si snadno napíšete podle Vašeho způsobu uložení číselníku do MySQL.

HTML stránka však pracuje samostatně a nemusí se po každé změně reloadovat.

<html lang="cs">
<HEAD>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Vyhledat</title>
<script>
// výpis číselníku pomocí PHP:
var kraje=
{'-----':['-----','vyberte kraj']
,CZ010:['CZ010','Hlavní město Praha']
,CZ031:['CZ031','Jihočeský']
,CZ062:['CZ062','Jihomoravský']
,CZ041:['CZ041','Karlovarský']
,CZ052:['CZ052','Královéhradecký']
,CZ051:['CZ051','Liberecký']
,CZ080:['CZ080','Moravskoslezský']
,CZ071:['CZ071','Olomoucký']
,CZ053:['CZ053','Pardubický']
,CZ032:['CZ032','Plzeňský']
,CZ020:['CZ020','Středočeský']
,CZ042:['CZ042','Ústecký']
,CZ061:['CZ061','Vysočina']
,CZ072:['CZ072','Zlínský']
};
var okres=
{'------':['------','vyberte okres','-----']
,CZ0201:['CZ0201','Benešov','CZ020']
,CZ0202:['CZ0202','Beroun','CZ020']
,CZ0621:['CZ0621','Blansko','CZ062']
,CZ0622:['CZ0622','Brno-město','CZ062']
,CZ0623:['CZ0623','Brno-venkov','CZ062']
,CZ0801:['CZ0801','Bruntál','CZ080']
,CZ0624:['CZ0624','Břeclav','CZ062']
,CZ0511:['CZ0511','Česká Lípa','CZ051']
,CZ0311:['CZ0311','České Budějovice','CZ031']
,CZ0312:['CZ0312','Český Krumlov','CZ031']
,CZ0421:['CZ0421','Děčín','CZ042']
,CZ0321:['CZ0321','Domažlice','CZ032']
,CZ0802:['CZ0802','Frýdek-Místek','CZ080']
,CZ0611:['CZ0611','Havlíčkův Brod','CZ061']
,CZ0625:['CZ0625','Hodonín','CZ062']
,CZ0521:['CZ0521','Hradec Králové','CZ052']
,CZ0411:['CZ0411','Cheb','CZ041']
,CZ0422:['CZ0422','Chomutov','CZ042']
,CZ0531:['CZ0531','Chrudim','CZ053']
,CZ0512:['CZ0512','Jablonec nad Nisou','CZ051']
,CZ0711:['CZ0711','Jeseník','CZ071']
,CZ0522:['CZ0522','Jičín','CZ052']
,CZ0612:['CZ0612','Jihlava','CZ061']
,CZ0313:['CZ0313','Jindřichův Hradec','CZ031']
,CZ0412:['CZ0412','Karlovy Vary','CZ041']
,CZ0803:['CZ0803','Karviná','CZ080']
,CZ0203:['CZ0203','Kladno','CZ020']
,CZ0322:['CZ0322','Klatovy','CZ032']
,CZ0204:['CZ0204','Kolín','CZ020']
,CZ0721:['CZ0721','Kroměříž','CZ072']
,CZ0205:['CZ0205','Kutná Hora','CZ020']
,CZ0513:['CZ0513','Liberec','CZ051']
,CZ0423:['CZ0423','Litoměřice','CZ042']
,CZ0424:['CZ0424','Louny','CZ042']
,CZ0206:['CZ0206','Mělník','CZ020']
,CZ0207:['CZ0207','Mladá Boleslav','CZ020']
,CZ0425:['CZ0425','Most','CZ042']
,CZ0523:['CZ0523','Náchod','CZ052']
,CZ0804:['CZ0804','Nový Jičín','CZ080']
,CZ0208:['CZ0208','Nymburk','CZ020']
,CZ0712:['CZ0712','Olomouc','CZ071']
,CZ0805:['CZ0805','Opava','CZ080']
,CZ0806:['CZ0806','Ostrava-město','CZ080']
,CZ0532:['CZ0532','Pardubice','CZ053']
,CZ0613:['CZ0613','Pelhřimov','CZ061']
,CZ0314:['CZ0314','Písek','CZ031']
,CZ0324:['CZ0324','Plzeň-jih','CZ032']
,CZ0323:['CZ0323','Plzeň-město','CZ032']
,CZ0325:['CZ0325','Plzeň-sever','CZ032']
,CZ0100:['CZ0100','Praha','CZ010']
,CZ0111:['CZ0111','Praha 1','CZ010']
,CZ011A:['CZ011A','Praha 10','CZ010']
,CZ0112:['CZ0112','Praha 2','CZ010']
,CZ0113:['CZ0113','Praha 3','CZ010']
,CZ0114:['CZ0114','Praha 4','CZ010']
,CZ0115:['CZ0115','Praha 5','CZ010']
,CZ0116:['CZ0116','Praha 6','CZ010']
,CZ0117:['CZ0117','Praha 7','CZ010']
,CZ0118:['CZ0118','Praha 8','CZ010']
,CZ0119:['CZ0119','Praha 9','CZ010']
,CZ0209:['CZ0209','Praha-východ','CZ020']
,CZ020A:['CZ020A','Praha-západ','CZ020']
,CZ0315:['CZ0315','Prachatice','CZ031']
,CZ0713:['CZ0713','Prostějov','CZ071']
,CZ0714:['CZ0714','Přerov','CZ071']
,CZ020B:['CZ020B','Příbram','CZ020']
,CZ020C:['CZ020C','Rakovník','CZ020']
,CZ0326:['CZ0326','Rokycany','CZ032']
,CZ0524:['CZ0524','Rychnov nad Kněžnou','CZ052']
,CZ0514:['CZ0514','Semily','CZ051']
,CZ0413:['CZ0413','Sokolov','CZ041']
,CZ0316:['CZ0316','Strakonice','CZ031']
,CZ0533:['CZ0533','Svitavy','CZ053']
,CZ0715:['CZ0715','Šumperk','CZ071']
,CZ0317:['CZ0317','Tábor','CZ031']
,CZ0327:['CZ0327','Tachov','CZ032']
,CZ0426:['CZ0426','Teplice','CZ042']
,CZ0525:['CZ0525','Trutnov','CZ052']
,CZ0614:['CZ0614','Třebíč','CZ061']
,CZ0722:['CZ0722','Uherské Hradiště','CZ072']
,CZ0427:['CZ0427','Ústí nad Labem','CZ042']
,CZ0534:['CZ0534','Ústí nad Orlicí','CZ053']
,CZ0723:['CZ0723','Vsetín','CZ072']
,CZ0626:['CZ0626','Vyškov','CZ062']
,CZ0724:['CZ0724','Zlín','CZ072']
,CZ0627:['CZ0627','Znojmo','CZ062']
,CZ0615:['CZ0615','Žďár nad Sázavou','CZ061']
}; // konec PHP výpisu
function addOption(co,kam)
{   var oOption = document.createElement('option');
    oOption.value=co[0];
    oOption.innerHTML=co[1];
    kam.appendChild(oOption);
}
function fillFirst()
{   for(inx in kraje){ addOption(kraje[inx],oKraj)}
    for(inx in okres){ addOption(okres[inx],oOkres)}
}
function edOkres(tenKraj)
{   oOkres.length=1;
    for(inx in okres) { if (tenKraj == okres[inx][2] || tenKraj == '-----') addOption(okres[inx],oOkres)}
}
function edKraj(tenOkres)
{   if(tenOkres == '------')
    { oOkres.length=0; for(inx in okres){ addOption(okres[inx],oOkres)}; oKraj.value="-----";}
    if(oKraj.value != okres[oOkres.value][2]) oKraj.value = okres[oOkres.value][2]
}
</script>
</HEAD>
<body onload="fillFirst()">
Nazdar
<form name="vyber">
kraj: <select name="kraj" onchange="edOkres(this.value)"></select>
okres: <select name="okres" onchange="edKraj(this.value)"></select>
</form>
<script>
var oKraj=document.forms.vyber.kraj;
var oOkres=document.forms.vyber.okres;
</script>
</body>
</html>
vospunt
Profil
pokud zvolíš na tvrdo tak při načtení stránky proveď příkaz do db ajaxerm na vypsání
          var kraj = $('#kraj option:selected').val();
$.get('funkce/ajax2.php?kraj='+kraj, function(data){
                  $('#okres').show().html(data); 
              });

tohle se teda provede po načtení stránky a potom pokračujem tím co máte v js už napsané change(function(){...})

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0