Autor Zpráva
Pavel Straka
Profil
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:
Upravoval by som elementy option radšej nejako štandardnejšie, napríklad takto.
Pavel Straka
Profil
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
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ť optiony inak ako v tvojom kóde si už skúšal?
Pavel Straka
Profil
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 optionov stačí o.length=0;.
Chamurappi
Profil
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
_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
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.

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: