Autor | Zpráva | ||
---|---|---|---|
Pavel Straka Profil |
#1 · Zasláno: 7. 3. 2012, 10:34:51
Dobré dopoledne, mohl by mi prosím někdo poradit, jak zprovoznit v IE tento skript:
http://remysharp.com/2007/01/20/auto-populating-select-boxes-using-jquery-ajax/ ? Skládá se ze 2 částí: index.php .... <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" charset="utf-8"> $(function(){ $("select#ctlJob").change(function(){ $.getJSON("/select.php",{id: $(this).val(), ajax: 'true'}, function(j){ var options = ''; for (var i = 0; i < j.length; i++) { options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>'; } $("select#ctlPerson").html(options); }) }) }) </script> <form action="/select_demo.php"> <label for="ctlJob">Job Function:</label> <select name="id" id="ctlJob"> <option value="1">Managers</option> <option value="2">Team Leaders</option> <option value="3">Developers</option> </select> <noscript> <input type="submit" name="action" value="Load Individuals" /> </noscript> <label for="ctlPerson">Individual:</label> <select name="person_id" id="ctlPerson"> <option value="1">Mark P</option> <option value="2">Andy Y</option> <option value="3">Richard B</option> </select> <input type="submit" name="action" value="Book" /> </form> ... a select.php: <?php if ($_GET['id'] == 1) { echo <<<HERE_DOC [ {"optionValue": 0, "optionDisplay": "Mark"}, {"optionValue":1, "optionDisplay": "Andy"}, {"optionValue":2, "optionDisplay": "Richard"}] HERE_DOC; } else if ($_GET['id'] == 2) { echo <<<HERE_DOC [{"optionValue":10, "optionDisplay": "Remy"}, {"optionValue":11, "optionDisplay": "Arif"}, {"optionValue":12, "optionDisplay": "JC"}] HERE_DOC; } else if ($_GET['id'] == 3) { echo <<<HERE_DOC [{"optionValue":20, "optionDisplay": "Aidan"}, {"optionValue":21, "optionDisplay":"Russell"}] HERE_DOC; } ?> Na internetu jsem se dočetl jen, že v IE by měl fungovat výpis [ {"optionValue":"10", "optionDisplay": "Remy"}, {"optionValue":"11", "optionDisplay": "Arif"}, {"optionValue":"12", "optionDisplay": "JC"}] Nicméně můj hlavní problém tkví v tom, že vypisuji data z databáze a jedná se tedy vždy o řekněme 20 položek (<option>) v selectu, když vypisuji jen jednu položku v selectu, funguje to i v IE9. Musím tedy použít heredoc? S tím mi to také nefungovalo. Takto vypadá můj select.php: header('Cache-Control: no-cache, must-revalidate'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Content-type: application/json'); header("Content-Type: text/html; charset=windows-1250"); include "include.php"; $podkat = MySQL_Query("SELECT id,kategorie FROM kategorie WHERE pod='".$_GET[id]."'"); $i = 1; $vypis = "["; while ($p = MySQL_Fetch_Array($podkat)) { $vypis .= "{\"optionValue\": \"$p[id]\", \"optionDisplay\": \"$p[kategorie]\"}"; if ($i != MySQL_Num_Rows($podkat)) $vypis .= ","; $i++; } $vypis .= "]"; echo $vypis; Jak bych měl správně použít heredoc nebo co jiného udělat, aby byla celá věc funkční i v IE9? Děkuji za rady. |
||
_es Profil |
|||
Pavel Straka Profil |
#3 · Zasláno: 7. 3. 2012, 11:20:57
A mohl bys mi prosím poradit, jak by vypadal v tomto případě ten soubor ajax_load.php - ten, ze kterého se tahají data? Děkuju
|
||
_es Profil |
#4 · Zasláno: 7. 3. 2012, 11:29:49
Pavel Straka:
„jak by vypadal v tomto případě ten soubor ajax_load.php“ No veď ale problém máš len v prehliadači, tak snáď bude problém len v JS. Jedine, že by server vracal nejaké porúchané dáta, napríklad IE odmieta syntax {vlastnosť1:hodnota1,vlastnosť2:hodnota2,} (čiarka navyše). Pridávať option y inak ako v tvojom kóde si už skúšal?
|
||
Pavel Straka Profil |
#5 · Zasláno: 7. 3. 2012, 11:33:10 · Upravil/a: Pavel Straka
Zkoušel jsem ten způsob, který je popsaný v topicu, na který jsi mě odkázal, ale nefunguje mi, možná ale něco dělám špatně. Jak by prosím vypadal ta upravená část:
<script type="text/javascript" charset="utf-8"> $(function(){ $("select#ctlJob").change(function(){ $.getJSON("/select.php",{id: $(this).val(), ajax: 'true'}, function(j){ var options = ''; for (var i = 0; i < j.length; i++) { options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>'; } $("select#ctlPerson").html(options); }) }) }) </script> A předpokládám správně, že můj select.php zůstane stejný? |
||
_es Profil |
Pavel Straka:
„Jak by prosím vypadal ta upravená část:“ Nepoužívam jQuery a nechcem robiť mix jQuery a nejQuery kódu, skús vyskúšať nejaké iné metódy jQuery na pridávanie elementov, napríklad metódu add , alebo si uprav skript v tom odkazovanom vlákne v [#2]. Na zmazanie existujúcich option ov stačí o.length=0; .
|
||
Chamurappi Profil |
#7 · Zasláno: 7. 3. 2012, 12:25:27
Reaguji na Pavla Straku:
Doufám, že těch <select> ů a <option> ů jsou aspoň desítky, nebo že jsou závislé na něčem často proměnlivém… jinak postrádá smysl tahat je AJAXem.
|
||
Pavel Straka Profil |
#8 · Zasláno: 7. 3. 2012, 12:43:34
_es:
jQuery právě vůbec neovládám. Zkoušel jsem upravit skript z toho odkazovaného vlákna a bohužel mi nefunguje. Proto bych ti byl vděčný, kdybys mně dokázal nějak pomoci. Chamurappi: V prvním selectu je 28 položek, v druhém v průměru 15. Nebránil bych se jinému řešení, hlavně, aby to fungovalo ve všech prohlížečích. |
||
_es Profil |
#9 · Zasláno: 7. 3. 2012, 13:11:41
Pavel Straka:
„V prvním selectu je 28 položek, v druhém v průměru 15.“ Teda celkovo asi 400 hodnôt druhého selectu? „Nebránil bych se jinému řešení“ Chamurappi myslel možnosť, že by boli všetky možnosti už obsiahnuté v načítanom JS a nič by nebolo treba dodatočne sťahovať. V odkázanom vlákne je vidieť, že úprava optionov v selecte nie je nič zložité a chce to len trochu programovania, jQuery netreba. |
||
Časová prodleva: 11 let
|
0