Autor Zpráva
Petr-K
Profil *
Ahoj, chtěl bych poprosit o malou radu.
Mám tři selecty:
1) kraje ČR
2) Okresy ve vybraném kraji (počáteční stav disabled)
3) Města ve vybraném okresu (počáteční stav disabled)

Zjevně logická funkčnost by měla být: dle vybraného kraje se načtou okresy a zruší se atribut disabled. Dále po vybrání okresu, se načtou města v daném okresu a zruší se atribut disabled.

Nevím čím to je, ale ještě minulý týden, když jsem to testovat, se vše se zdálo OK, ale nyní druhá fáze nefunguje. Zjevně již vygenerovaný select okresů na základě vybraného kraje nedokáže zavolat ajax, pro vygenerování měst. Myslel jsem, ze to vyřeším funkcí .live(), ale bohužel to nefunguje...

Nejspíše bude zapotřebí upravit callback fci, ale s tím si nejsem jist, můžete mi prosím poradit nebo poupravit kód?
Díky moc.
P

$(document).ready(function(){                        
  $("#area_region").live('change', function(){                     
    $.ajax({  
      type: "POST", 
      url: 'ajax_load_county.php', 
      data: {
        id_region        :    $("#area_region").val(),
        id_language    :    'cz'
      },
      complete: function(data){                   
        $("#ajax_area_county").html(data.responseText);
        if ($("#area_region").val() == "none" || $("#area_county").val() == "none") {
           $("#area_city").attr("disabled", "disabled");
           $("#area_city").val("none");
           $("#area_county").val("none");
        }
      }  
    }); 
    return false;  
  }); 
            
  $("#area_county").live('change', function(){                      
    $.ajax({  
      type: "POST", 
      url: 'ajax_load_city.php', 
      data: {
        id_county        :    $("#area_county").val(),
        id_language    :    'cz'
      },
      complete: function(data){                   
        $("#ajax_area_city").html(data.responseText);
      }  
    }); 
    return false;  
  }); 
}); 
_es
Profil
Petr-K:
Pre kraje, okresy a mestá v ČR by bolo asi lepšie načítať všetky hodnoty vopred a nie až po akcii návštevníka - nie je ich až tak veľa. Prečo nenastavuješ udalosti a hodnoty priamo na formulárových prvkoch a zbytočne to komplikuješ?

$("#area_city").attr("disabled", "disabled");
Treba meniť vlastnosť disabled na true alebo false, nie atribút disabled ( Doporučuji užívat standardní vlastnosti HTML DOMu místo getAttribute/setAttribute).

můžete mi prosím poradit nebo poupravit kód?
K akému HTML kódu sa uvedený JS kód vzťahuje si asi ťažko niekto domyslí.
Petr-K
Profil *
_es:
Proč myslíš že si to komplikuji? Nevím jak bych to dle Tvého načrtnutí (načítat všechny hodnoty - měst je více jak 6000) řešil.
Hlavně by mě zajímalo, jak mohu dál používat select, který je načtený AJAXem.

PS: Jinak jsem dle Tvého doporučení použil změnu vlastnosti na true či false.
_es
Profil
Petr-K:
Prvky option treba upravovať nejako štandardne, napríklad nejako takto.
Petr-K
Profil *
_es:
Takže jde čistě o to, načítat pouze prvky <option> ne celý <select>? Což o to, to je v pořádku - ozkoušel jsem to a funguje to. Ale nenačítám všechna data najednou, tak jak jsi psal, ale stále postupně, dle vybrané oblasti uživatelem. Nevidím v tom zásadní rozdíl, protože druhý select (obsah selectu) bude stále generován AJAXem a v tom byl můj původní problém. Tímto vygenerovaným selectem mi nejde znovu volat AJAX a vygenerovat obsah třetího selectu s názvy měst.
Promiň, možná jsem Tě špatně pochopil, takže pokud pokud se ptám a něco, co jsi se mi snažil naznačit, tak mě Teď pořádně nakopni, více mi to rozepiš....
Díky moc, za pomoc.
_es
Profil
Petr-K:
Základ je asi takýto:
<select onchange="funkcia1(this.value)">kraje</select>
<select onchange="funkcia2(this.value)" disabled>okresy</select>
<select disabled>mestá</select>
Funkcia1 nastaví prvky option v druhom selecte a funkcia2 v treťom.

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:

0