Autor Zpráva
Ahoj
Profil *
Dobrý den, potřeboval bych poradit. mám formulář a v něm select, ve kterém když se něco vybere, tak se má automaticky načíst do druhého selectu data z databáze, podle toho co bylo vybráno v prvním. problém je, že ten můj js mi refreshne stránku a ostatní položky ve formuláři vymaže, co s tím?
Tady je kod:
    
vypis: function(){
            $("#Select2").attr("disabled", "disabled");
            $("#Select1").bind("change", function(){
                var url = "?id=" + $("#Select1 option:selected").val();
                window.open(url, "_self");
            })
            $("#Select2").removeAttr("disabled");
    }

<tr>
            <td><label for="Select1">Vyber1: </label></td>
            <td>
                <select name="IDvyber1" id="Select1">
                    <option></option>
                    <?php foreach(getData() as $value):  ?>
                        <option value="<?= $value["ID"]?>"><?= $value["Hodnota"] ?></option>
                    <?php endforeach; ?>
                </select>
            </td>
        </tr>
        <tr>
            <td><label for="Select2">Vyber2: </label></td>
            <td>
                <select name="IDvyber2" id="Select2">
                    <?php foreach(getData2($_GET["id"]) as $d):  ?>
                    <option value="<?= $d["ID"]?>"><?= $d["Hodnota"] ?></option>
                    <?php endforeach; ?>
                </select>
            </td>
        </tr>
Po vybrání v prvním selectu se načtou data do selectu dva, ale ten první se vymaže, potřebuju aby tam zůstala nastavena hodnota, která byla vybrána

Děkuji


ještě jsem zapoměl přidat volání té funkce:
<body onload="vypis()">
_es
Profil
Ahoj:
window.open(url, "_self");
Tento príkaz načíta do aktuálneho okna novú stránku a teda potom sa aj ukončí všetok JS stránky.
Ahoj
Profil *
No a jak to teda udělat jinak?
_es
Profil
Ahoj:
Áno, nejako inak. Naštuduj si základné veci o AJAXe.
Ahoj
Profil *
na to už jsem koukal, ale moc tomu nerozumím, mohl bys mi poradit víc? hledal jsem na internetu i nějaký hotový skript, ale nic moc jsem nenašel, přitom něco podobného jsem viděl snad u každého druhého webu...
Ahoj
Profil *
Myslíš ten ajax použít na výpis z databáze?
Ahoj
Profil *
Ahoj, tak už mám nějaké řešení, ale pořád to nefunguje tak jak by mělo. do toho druhého selectu se totiž vypíší nejprve hodnoty z toho prvního a pod to, ty které by tam měli být. tady je kod:

database:
tridy
IDtrida | Trida

studenti
IDstudent | IDtrida | Jmeno

function.php
     function tridy(){
        $query = mysql_query("SELECT `IDtrida`, `Trida` FROM `tridy`");
        $data = array();
        while ($row = mysql_fetch_array($query))
            $data[] = $row;
        return $data;
    }


    function studenti($idTrida){
        $query = mysql_query("SELECT `IDstudent`, `Jmeno` FROM `studenti` WHERE `IDtrida` = $idTrida");
        $data = array();
        while ($row = mysql_fetch_array($query))
            $data[] = $row;
        return $data;
    }

index.php
<?php
 include "function.php";
?>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <script type="text/javascript" src="script/jquery.js"></script>
        <script type="text/javascript" src="script/jquery-ui.js"></script>
        <script type="text/javascript" src="script/function.js"></script>
        <title>Pokus</title>
    </head>
    <body>
        <form>
            <select name="trida" onchange="studenti(this.value)">
                <?php foreach(tridy() as $t): ?>
                <option value="<?= $t["IDtrida"]?>"><?= $t["Trida"]?></option>
                <?php endforeach; ?>
            </select>
            
            
            <select name="student" id="student">
                <?php foreach(studenti($_GET["id"]) as $s): ?>
                <option value="<?= $s["IDstudent"]?>"><?= $s["Jmeno"]?></option>
                <?php endforeach; ?>
            </select>
        </form>
    </body>
</html>

function.js
m
studenti: function(str) {
        if (str == "")
        {
            document.getElementById("student").innerHTML = "";
            return;
        }
        if (window.XMLHttpRequest)
        {// code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp = new XMLHttpRequest();
        }
        else
        {// code for IE6, IE5
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange = function()
        {
            if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
            {
                document.getElementById("student").innerHTML = xmlhttp.responseText;
            }
        }
        xmlhttp.open("GET", "index.php?id=" + str, true);
        xmlhttp.send();
v prvním selectu vyberu tředa 1.Třída a ve druhém se objeví:
1.Třída
2.Třída
3.Třída
....
Karel
Jirka
Prostě ten první select mi to zkopíruje do toho druhého...
Už na to koukám dvě hodiny a pořád nevím co s tím...děkuji za radu.
Ahoj
Profil *
Opravdu se nenajde někdo kdo ví kde je chyba?
Ahoj
Profil *
Přišel jsem na to, že problém asi nejspíš bude v tom function.js, že ten tam ty údaje z prvního selectu nějak přidává, ale nevím jak je to možné...
engien
Profil *
že ten tam ty údaje z prvního selectu nějak přidává
Ne, je to jinak. Do stránky vlepujete AJAXem tu samou stránku ještě jednou. Máte AJAXem stahovat jen data pro druhý select. No a innerHTML Vám u selectu nebude fungovat v IE, takže se jednotlivé položky option musí měnit přímo. Zkuste pochopit co dělají kódy použité tady Ajax přidání options do selectu nefunguje v IE a pak už je to brnkačka.
Ahoj
Profil *
engien:
tak jsem koukal na kod v tom odkazu, udělal jsem to podle něj a pořád to funguje stejně. použil jsem tento js:
<script type="text/javascript" charset="utf-8">

var xmlhttp;
function loadXMLDoc(url,cfunc) {
  if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
  } else {// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange=cfunc;
  xmlhttp.open("GET",url,true);
  xmlhttp.send();
}  

function remove(element) {
  return element.parentNode.removeChild(element);
}

function ajax_load_options(val) {
    var sel = document.getElementById('dva');
    var url = "ajax_load.php?data=" + val;
    
    loadXMLDoc(url,function() {
      if(xmlhttp.readyState==4 && xmlhttp.status==200) {
                sel.innerHTML = xmlhttp.responseText; // výstup přiřadí do selectu    
      } 
    });
}

</script>
U něj na stránce to funguje, ale u mě je to pořád stejné...zkoušel jsem tedy něco s tím json, ale to mi nefungovalo vůbec. javascript moc neumím, tak bych byl rád, kdybyste mi s tím trochu pomohl, díky :)
engien
Profil *
Co Vám vlastně nefunguje? Ukázka http://tests.designovej.eu/djpw/select.php?json=1 nebo výpis z databáze?
Ahoj
Profil *
výpis z databáze je ok, problém je v tom, že to co je v prvním selectu se po vybrání objeví ve druhém.
takže když mám třeba:
<select>
A
B
C
</select>
po vybrání A by se mělo objevit třeba 1, 2, 3, ale ve druhém selectu bude
<select>
A
B
C
1
2
3
</select>
problém bude v tom js, ale ten skript jsem zkopíroval, v té ukázce funguje a u mě ne...
engien
Profil *
Pošlete odkaz na to co Vám nefunguje. Když budeme koukat na funkční kód, tak se chyba hledá dost těžko.
Ahoj
Profil *
http://webpokus.bluefile.cz/
engien
Profil *
Je tam stejný kód jako jste ukazoval už předevčírem. Dokud to nespravíte, tak to samo od sebe fungovat nezačne.

howgh
Ahoj
Profil *
zkoušel jsem použít ten skript odtud http://tests.designovej.eu/djpw/select.php ale ten mi také nefungoval. možná by to vyřešilo to načítání cyklem jako je zde, ale nevím kam to tam mám přidat.

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: