Autor | Zpráva | ||
---|---|---|---|
Demoniak Profil |
Zdravím,
mám javascript: $(document).ready(function() { //Nyní navážeme funkci na change event selectu se státy $('#znacka').change( function () { //Vynecháme nultý prvek ve kterém máme Zvolte ... if ($('#znacka option:selected').val() != 0) { var odesli = $.get('../vyberauto.php', {'znacka': $('#znacka option:selected').val()}); odesli.done(function (response) { //Smažeme stávající data v mesto selectu $('#typvozu').html = ""; var odpoved = JSON.parse(response); //Projedeme JSON odpověď od PHP scriptu for (var i in odpoved) { //Vytvoříme nový element option var el = $('#typvozu').add('<option value="' + odpoved[i].id + '">'+ odpoved[i].typ); //A vložíme ho do selectu mesto el.after($('#typvozu')); } //Dáme focus na select mesto $('#typvozu').focus(); }) odesli.error(function(odpoved){ alert("Chyba:" + odpoved); }) } }); }); vyberauto.php: <?php require_once "./class/DBPripoj.php"; require_once "./class/DBDotazy.php"; $id = intval($_GET['znacka']); $db = new DBDotazy(); $typ = $db->Query("SELECT * FROM addon_models WHERE makes_id='".$id."' ORDER BY models_name ASC"); $i = 0; while ($data = $db->FetchArray($typ)){ $option[$i]['id'] = $data['models_id']; $option[$i]['typ'] = $data['models_name']; $i = $i + 1; } echo json_encode($option); a stránku kam to chci zobrazit po vybrání prvního selectu: echo $PokudJsem->Prihlasen("<tr><td>Značka vozu:</td><td><select name='znacka' id='znacka'>"); $znacka = $db->Query("SELECT * FROM addon_makes ORDER BY makes_name ASC"); while ($z = $db->FetchArray($znacka)){ echo $PokudJsem->Prihlasen("<option value='".$z['makes_id']."'>".$z['makes_name']."</option>\n"); } echo $PokudJsem->Prihlasen("</select></td></tr>"); echo $PokudJsem->Prihlasen("<tr><td>Typ vozu:</td><td><select name='typvozu' id='typvozu'>"); echo $PokudJsem->Prihlasen("</select></td></tr>"); JSON mi z php vrací hodnotu (kopírováno z firebugu): [{"id":"1","typ":"CL"},{"id":"2","typ":"CSX"},{"id":"3","typ":"EL"},{"id":"4","typ":"Integra"},{"id":"5","typ":"Legend"},{"id":"6","typ":"MDX"},{"id":"7","typ":"NSX"},{"id":"8","typ":"RDX"},{"id":"9","typ":"RL"},{"id":"10","typ":"RSX"},{"id":"11","typ":"SLX"},{"id":"12","typ":"TL"},{"id":"13","typ":"TSX"},{"id":"14","typ":"Vigor"}] Jenže se pomocí JS nevytvoří onen option z příchozích hodnot. Můžete mi prosím poradit co a kde dělám špatně? Určitě to bude v javascriptu ale vůbec netuším kde. Předem díky za pomoc. |
||
yFang Profil |
#2 · Zasláno: 3. 1. 2016, 15:56:02
Demoniak:
Koukal jsem na to jen zběžně, nevím jestli to je tím, ale tady: //Vytvoříme nový element option var el = $('#typvozu').add('<option value="' + odpoved[i].id + '">'+ odpoved[i].typ); <option>
|
||
Chamurappi Profil |
#3 · Zasláno: 3. 1. 2016, 16:17:01
Reaguji na yFanga:
On snad měl někdy element <option> povinnou ukončovací značku?
Krom toho se innerHTML umí vypořádat prakticky se vším, co je neukončené, takže třeba i neuzavřený <div> funguje spolehlivě (prostě skončí na konci).
Reaguji na Demoniaka: „ el.after($('#typvozu')); “
Jestli dobře rozumím dokumentaci, tímto přidáváš <option> za element <select> .
„ for (var i in odpoved) “
Tento druh cyklu není určený na procházení polí. |
||
Demoniak Profil |
#4 · Zasláno: 3. 1. 2016, 16:34:58
Chamurappi:
Dokázal by si mi poradit co dosadit místo .after? Zkusím použít cyklus while. |
||
Demoniak Profil |
#5 · Zasláno: 4. 1. 2016, 20:17:51
Tak jsem to poupravil, ovšem response se mi pořád vypíše jen ve firebugu ale nedokážu ho dosadit do stánky, nikde se nic nezobrazí.
Poradíte prosím kde dělám chybu? $(document).ready(function() { //Nyní navážeme funkci na change event selectu se státy $('#znacka').change( function () { //Vynecháme nultý prvek ve kterém máme Zvolte ... //if ($('#znacka option:selected').val() != 0) { //Vytvoříme MooTools Request.JSON var odesli = $.get('../vyberauto.php', {'znacka': $('#znacka option:selected').val()}); odesli.done(function (response) { //Smažeme stávající data v mesto selectu //$('#typvozu').html = ""; var odpoved = JSON.parse(response); //Projedeme JSON odpověď od PHP scriptu var i = 0; var vysledek = ""; while (odpoved) { //Vytvoříme nový element option //$('#typvozu').add('<option value="' + odpoved[i].cid + '">'+ odpoved[i].typ); vysledek += '<option value="' + odpoved + '">'+ odpoved + '</option><br>'; i= i++; //A vložíme ho do selectu mesto //el.after($('#typvozu')); } $('#typvozu').append(vysledek); //Dáme focus na select mesto $('#typvozu').focus(); }); odesli.error(function(odpoved){ alert("Chyba:" + odpoved); }); //} }); }); Živou ukázku bohužel nemám, je to na localhostu. |
||
Chamurappi Profil |
#6 · Zasláno: 4. 1. 2016, 20:48:01
Reaguji na Demoniaka:
„ while (odpoved) “
V odpoved je vždy objekt, ne? To bude nekonečná smyčka…
„ i= i++; “
To také nevypadá správně. Řekl bych, že tímto řádkem neděláš nic, protože i++ vrátí i , následně se zvětší i o jedničku a pak se ta vrácená hodnota (čili i ) přiřadí do i .
|
||
Demoniak Profil |
#7 · Zasláno: 4. 1. 2016, 22:15:20
Díky za nakopnutí - vyřešeno. Byla chyba v cyklu
Dohledáno, opraveno a funkční. Ještě jednou díky :) Tady pro někoho kdyby hledal: //Vše bude probíhat až bude DOM připraven $(document).ready(function() { //Nyní navážeme funkci na change event selectu se státy $('#znacka').change( function () { //Vynecháme nultý prvek ve kterém máme Zvolte ... if ($('#znacka option:selected').val() != 0) { //Smažeme stávající data $('#typvozu').empty();ící data //Vytvoříme Request.JSON var odesli = $.get('../vyberauto.php', {'znacka': $('#znacka option:selected').val()}); odesli.done(function (response) { var odpoved = JSON.parse(response); //Projedeme JSON odpověď od PHP scriptu $.each(odpoved, function(i, typ) { var vysledek = '<option value="' + typ.cid + '">'+ typ.typ + '</option><br>'; $('#typvozu').append(vysledek); }); //Dáme focus na select typ $('#typvozu').focus(); }); odesli.error(function(odpoved){ alert("Chyba:" + odpoved); }); } }); }); |
||
Chamurappi Profil |
#8 · Zasláno: 4. 1. 2016, 22:41:39
Reaguji na Demoniaka:
„Dohledáno“ Já teda čekal, že umíš alespoň trochu programovat a že použiješ normální cyklus for (nebo ten while , ale správně), ne že budeš hledat hotové řešení pro něco tak triviálního, jako je průchod polem…
„ '</option><br>'; “
Brrr… |
||
Demoniak Profil |
#9 · Zasláno: 4. 1. 2016, 23:44:33
Chamurappi:
Za <br> za <option> se omlouvám, zkoušel jsem různé blbosti a jaksi tam zůstal tenhle tag. Našel jsem si pouze $.each , ostatní jsem si musel domyslet, tak nevidím nic co by na tom bylo špatného, důležité je, že se to povedlo domyslet ne? :) |
||
Časová prodleva: 9 let
|
0