Autor Zpráva
LosFilipos
Profil
Dobrý den,
řeším již nějaku dobu tento problém a nějak se nemohu dopátrat toho, v čem je chyba: Mám tento kód, který mi má přidat do druhého selectu options podle toho, co vyberu v selectu prvním. Ve Firefoxu, Chorme i Opeře to funguje bez sebemenších problémů, avšak v IE to blbne. Ajax mi vrací options tak, jak by měl, ale v IE se po přiřazení do innerHTML nic nezobrazí. Pokud si po přiřazení výstupu selectu vypíšu jeho innerHTML, vidím tam: "hodnota první</option><option>hodnota druhá</option> ..." - první značka option chybí a v selectu se nic zezobrazí. V ostaních prohlížečích se innerHTML zobrazuje správně. Poradí někdo, jak to rozchodit?

// V ukázce se dá přepnout mezi ajaxovým výstupem normálním a json; v php chyba také není...


Tak už jsem to vyřešil sám... :-D Těsně po odeslání tohoto příspěvku mě to napadlo. Pro přidání option do selectu teď používám toto:

        for(var i = 0; i < json_data.length; i++) {
          var x = document.createElement('option');
          x.innerHTML = json_data[i].value;
          select.appendChild(x);          
        }
a to funguje... Haleluja!
Chamurappi
Profil
Reaguji na LosFilipose:
Text <option>u se nastavuje vlastností text, tomu innerHTML bych zde moc nevěřil.

Původní problém spočíval v tom, že u některých elementů nejde v Exploreru měnit innerHTML.
LosFilipos
Profil
Chamurappi:
Text <option>u se nastavuje vlastností text, tomu innerHTML bych zde moc nevěřil.

Jsem odzkoušel že:
pro IE se musí použít innerText, pro ostatní prohlížeče text
Chamurappi
Profil
Reaguji na LosFilipose:
Nemusí.
LosFilipos
Profil
Chamurappi:
No mě to teda jinak než s innerText v IE nefungovalo...
_es
Profil
LosFilipos:
Element select má kolekciu options, cez ktorú sa dajú nové voľby pridávať, či odoberať a na prvok option je aj špeciálny konštruktor Option:
for(var i = 0, o = select.options; i < json_data.length; i++) o[o.length] = new Option(json_data[i].value);
LosFilipos
Profil
_es:
Díky moc, tohle funguje bezchybně.
Pavel Straka
Profil
LosFilipos: Mohl bys prosím být tak hodný a poslat mi všechny soubory, co jsou k tomuto třeba?
Kromě select.php je to jen ajax_load.php ?

Děkuji
LosFilipos
Profil
Pavel Straka:
V profilu nemáš žádný kontakt, takže to píšu sem...
Ajax_load.php obsahuje výstup z databáze do pole, které je na konci vypsáno funkcí json_encode - toť vše:
<?php
include('./db.php'); // připojení k db
$query = mysql_query(" ... výběr prvků selectu ...");
$return = array();
while($result = mysql_fetch_array($query)) {
    $return[] = array("value"=>$result['value'],"text"=>$result['text']);  
}

echo json_encode($return);
exit();
?>
Helmy
Profil
Zdravím mohl by někdo prosím poslat ukázku ze selectu?
Jde o to že mám tabulku ve které mam kraje a druhou tabulku kde mám obce.
A chci aby se podle options okresy načetly v dalším options obce podle zvoleného okresu.
Problém je že v js skoro nic neumím a v php už se nějaký ten měsíč učím.
Tak bych prosím vás potřeboval názornou ukázku. Díky


Chtěl jsem napsat:
Jde o to že mám tabulku ve které mam okresy a druhou tabulku kde mám obce.
LosFilipos
Profil
Zdravím všechny,
všechno potřebné pro zprovoznění dané problematiky jsem shromáždil na této stránce.

Good luck!
Btihin
Profil *
LosFilipos:
Ahoj dík za super návod, ale potřeboval bych si ověřit funkčnost.(jestli jsem to pochopil správně)
Kdybych chtěl do druhého selectu načítat data která patří do prvního selectu tak to bude vypadat takhle?
soubor php
<select id="jedna" onchange="ajax_load_options(this.value);">
  <option>vyberte</option>
  <?php 
        require ("mssql.php");
        $query1 = mssql_query("SELECT ID_Dodavatel, CAST(Nazev AS TEXT) AS Nazev FROM T_Dodavatel ORDER BY CAST(Nazev AS CHAR)");    
        while ($result1 = mssql_fetch_assoc($query1)) 
        {
            echo "<option value='" . $result1['ID_Dodavatele'] . "'>" . $result1['Nazev'] . "</option>";
        }   
        ?>
</select>

<select id="dva">
  <option>vyberte první select</option>
</select>

první select Dodavatel vybere dejme tomu ID 1 takže pošle JSONem "1" do souboru load v $_GET['data'] a pak můžu vyselectovat jen smlouvy s ID_Dodavatel = 1?

load soubor
<?php
require('mssql.php'); //načtení db

$sml = mssql_query('SELECT ID_Smlouva, Nazev_smlouvy FROM T_Smlouva WHERE ID_Dodavatel = "' . $_GET['data'] . '"');//výběr prvků selectu
$return = array();
while($result = mssql_fetch_assoc($sml)) {
    $return[] = array("value"=>$result['ID_Smlouva'],"text"=>$result['Nazev_smlouvy']);  
}
 
echo json_encode($return);
exit();
?>

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:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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