| 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: 10 let
|
|||
0