Autor Zpráva
nowis
Profil
Zdravím,

prosím, nemáte někdo vyřešeno, nebo neuměl by někdo vymyslet řešení problému, který asi nebude nějak složitý, ale já nevím jak na něj? Omlouvám se jsem JS téměř začátečník, už se to snažím vyřešit druhý den ale pořád jsem v nějaké slepé uličce...

Mám databázi krajů, k nim patřícím okresů a k nim patřícím obcím.
Potřeboval bych aby bylo možné v selectech "vyber_kraj", "vyber_okres" a "vyber_obec" dvojklikem výběr přidat jako nový řádek do textarea.
Dále aby se při jednokliku v selectech "vyber_kraj" a "vyber_okres" zobrazil patřičný obsah v následujícím selectu.

Pro příklad kliknu na Stredocesky kraj a v selectu pro okresy se zobrazí středočeské okresy. Pokud na středočeský kraj dvojkliknu, rovnou se do textarea zapíše nový řádek "Středočeský kraj". Mělo by přitom fungovat i v případě vícenásobného výběru.

Mám tento kód:

<html><head>
<script type="text/javascript"  src="postupny_vyber.js"></script>
</head>
<body>

<form>

Kraje:
<select name="vyber_kraj" size="15" multiple  onclick="filtruj_okres()" ondblclick="zapis_kraj()" >
    <option value="Praha">Praha</option>
    <option value="Stredocesky">Stredocesky</option>
</select>

Okresy:    
<select name="vyber_okres" size="15" multiple  onclick="filtruj_obec()" ondblclick="zapis_okres()" >
    <?php echo $vybrane_okresy_options; ?>
</select>

Obce:
<select name="vyber_obec" size="15" multiple  ondblclick="zapis_obec()" >
    <?php echo $vybrane_obce_options; ?>
</select>

Vybrano:
<textarea rows="15" cols="15" name="vybrane_oblasti">
    <?php echo $vybrane_oblasti; ?>
</textarea>
    
</form>

</body>
</html>

Dotazy do DB bych asi vyřešil sám, jde mi spíše o to přenášení hodnot pomocí JS...

Díky
Destiny_1
Profil
V rychlosti jsem sesmolil malou ukázku

obsah souboru index.html

<html>
<head>
<meta charset="utf-8">  
</head>    
<body>
 

 
Kraje:
<select name="vyber_kraj" size="15" multiple  id="kraj" onclick="filtruj(this)" ondblclick="zapis(this.value)" >
    <option value="Zlínský kraj">Zlínský kraj</option>
    <option value="Olomoucký kraj">Olomoucký kraj</option>
</select>
 
Okresy:    
<select name="vyber_okres" size="15" multiple  id="okres" onclick="filtruj(this)" ondblclick="zapis(this.value)" >  
</select>
 
Obce:
<select name="vyber_obec" size="15" multiple id="obec" ondblclick="zapis(this.value)" >
</select>
 
Vybrano:
<textarea rows="15" cols="15" name="vybrane_oblasti" id="textarea"></textarea>

<script>
function filtruj(e){
var xhr = new XMLHttpRequest();
xhr.open('POST', 'ajax.php', true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.onload = function () {

    var jsonObj=JSON.parse(this.responseText);
    document.getElementById(jsonObj.cil).innerHTML = "";;
    for (i=0; i < jsonObj.option.length; i++){
    var option = document.createElement("option");
    console.log(jsonObj.option[i]);
    option.text = jsonObj.option[i];
    option.value= jsonObj.option[i];
    document.getElementById(jsonObj.cil).add(option);
    }
};
xhr.send('id='+e.id+"&value="+e.value);

}
function zapis(e){
 document.getElementById("textarea").value +=e+"\n";   
}
</script> 
</body>
</html>

obsah souboru ajax.php
Místo pole použijete dotazy na db


<?php

$id=filter_input(INPUT_POST, "id");
$value=filter_input(INPUT_POST, "value");

$kraj["Zlínský kraj"]=array("Zlín","Uherské hradiště");
$kraj["Olomoucký kraj"]=array("Olomouc","Přerov");

$obec["Zlín"]=array("Želechovice","Otrokovice");
$obec["Uherské hradiště"]=array("Bojkovice","Březová");
$obec["Olomouc"]=array("Blatec","Blatec");
$obec["Přerov"]=array("Bělotín","Lhota");

header('Content-Type: application/json; charset=utf-8');
if ("kraj"==$id){
   if (isset($kraj[$value])){
      $data=array(); 
      $data["option"]=$kraj[$value];
      $data["cil"]="okres"; 
      echo json_encode($data);
   }
    
} elseif ("okres"==$id){
   if (isset($obec[$value])){
      $data=array(); 
      $data["option"]=$obec[$value];
      $data["cil"]="obec"; 
      echo json_encode($data);
   }    
    
}
?>
nowis
Profil
Destiny_1:
Děkuji, prohrabu se tím :-)

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