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
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);
není uzavřený tag <option>
Chamurappi
Profil
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
Chamurappi:
Dokázal by si mi poradit co dosadit místo .after?

Zkusím použít cyklus while.
Demoniak
Profil
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
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
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
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
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? :)

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: