Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML]select zdarzenia
Forum PHP.pl > Forum > Przedszkole
blizniak
  1. <?php
  2. echo '<select  id="dhtmlgoodies_country" name="dhtmlgoodies_country" onchange="getCityList(this)" >';
  3.        
  4.    
  5.          $wynik = mysql_query("select  *  from region ");
  6.  
  7.                                    
  8.                 while($rzad1 = mysql_fetch_array($wynik))
  9.                   {
  10.                $idd = addslashes($rzad1["reg_ang"]);
  11.                    
  12.                     echo '<option value='.$rzad1["id"].'>' .$idd.'</option>';
  13.                    
  14.                   }
  15.        
  16.  
  17.  
  18.        echo '</select>';
  19.  
  20.  
  21.  
  22. echo '<select id="dhtmlgoodies_city" name="dhtmlgoodies_city">';
  23. echo '</select>';
  24. ?>

jest taki problem ze w momencie gdy user wchodzi na strone to ten drugi select pozostaje pusty poniewaz w pierwszym select jest onchange, natomiast gdy user cos zmieni w pierwszym select to wszystko jest dobrze tz grugi select sie wczytuje
tylko teraz tak co powinienem dac zamiast onchange aby ten drugi select tez sie wczytywal gdy user pierwszy raz wejdzie na strone i nie zmieni jeszcze tego pierwszego selecta
erix
Wywołaj metodę getCityList podstawiając za argument zwrócony obiekt <select/> (wyciągnij go sobie przez np. getElementById).
blizniak
ale gdzie mam wywolac to getCityList i jak questionmark.gif
SzamanGN
A czy leprzym rozwiązaniem nie jest ukrycie drugiego SELECT przy pierwszym wejściu?
Grzyw
Dwa wyjścia.

Albo:
  1. <body onload="getcitylist(document.getElementById('dhtmlgoodies_country'))">
  2. (........)


albo gdzieś w skrypcie:
  1. <script language="javascript">
  2. getcitylist(document.getElementById('dhtmlgoodies_country'));


Polecam to pierwsze.
blizniak
zrobilem tak jak napisales
  1. <script language="javascript">
  2. getcitylist(document.getElementById('dhtmlgoodies_country'));

ale i tak ten drugi select nie wczytuje sie przy pierwszym wejsciu na strone, a w body tego nie moge dac bo mam juz inna funkcje, ale i tak jak nachwile zmienilem to i tak nie dziala
moze w tej funckji cos trzeba zmienic
  1. function getCityList(sel)
  2. {
  3. var countryCode = sel.options[sel.selectedIndex].value;
  4. document.getElementById('dhtmlgoodies_city').options.length = 0; // Empty city select box
  5. if(countryCode.length>0){
  6. ajax.requestFile = 'getCities.php?countryCode='+countryCode; // Specifying which file to get
  7. ajax.onCompletion = createCities; // Specify function that will be executed after file has been found
  8. ajax.runAJAX(); // Execute AJAX function
  9. }
  10. }
  11.  
  12. function createCities()
  13. {
  14. var obj = document.getElementById('dhtmlgoodies_city');
  15. eval(ajax.response); // Executing the response from Ajax as Javascript code
  16. }
erix
Cytat
a w body tego nie moge dac bo mam juz inna funkcje

Przecież możesz podać kilka funkcji... Oddziel je średnikiem.

Cytat
ale i tak ten drugi select nie wczytuje sie przy pierwszym wejsciu na strone

Jeśli dajesz skrypt przed selectem, to się nie dziw - przy wywołaniu dokument nie jest jeszcze wczytany.

Poza tym, to poczytaj o nieinwazyjnym podpinaniu zdarzeń; onload="asd()", onclick="asdasd()", to teraz obciach. tongue.gif
blizniak
ok dzieki wielkie teraz juz chodzi prawie tak jak powinno
tylko jeszcze jedno pytanie
jak wczytac wartosc zmiennej php do tej funkcji np
  1. $xx=1;
  2. <script language="javascript">
  3. print("var a=".$xx.";\n");
  4. getCityList(a);

tylko ze to nie dziala
erix
Wyświetl ten kod w przeglądarce ;p.

Subtelna, ale różnica:
  1. <?PHP $xx=1; ?>
  2. <script language="javascript">
  3. <?PHP print("var a=".$xx.";\n"); ?>
  4. getCityList(a);
  5. </script>

winksmiley.jpg
blizniak
to dziala
  1. getCityList(document.getElementById('dhtmlgoodies_country'));

to nie dziala
  1. <?PHP $xx=1; ?>
  2. <script language="javascript">
  3. <?PHP print("var a=".$xx.";\n"); ?>
  4. getCityList(a);

czemu ten drugi sposob mi nie dziala przeciez
  1. document.getElementById('dhtmlgoodies_country')

zawsze zwraca mi 1 albo 2 bo w bazie mam tylko 2 rekordy
  1. echo '<select id="dhtmlgoodies_country" name="dhtmlgoodies_country" onchange="getCityList(this)" >';
  2.  
  3. $wynik = mysql_query("select * from region ");
  4.  
  5. while($rzad1 = mysql_fetch_array($wynik))
  6. {
  7. $idd = addslashes($rzad1["reg_ang"]);
  8.  
  9. echo '<option value='.$rzad1["id"].'>' .$idd.'</option>';
  10.  
  11. }
  12.  
  13. echo '</select>';

wiec czemu jezeli pobieram prze document.getEle... to dziala a jak przekaze jakas wartosc poprzez zmienna php to nie dziala
Rafal Filipek
jest różnica czy przekazujesz referencje do obiektu
Kod
document.getElementById('dhtmlgoodies_country')
czy wartośc
Kod
1 lub 2

musisz się na coś zdecydować.
Nie działa bo wywołanie
Kod
options[sel.selectedIndex].value;
dla liczby 2 jest bez sensu.
blizniak
to jak to zmienic zeby mozna przekazac jakas wartsc z php do tej funkcji
Rafal Filipek
Zawsze do funkcji getCityList przekazuj wartość a nie referencje. Czyli
z php
Kod
<?PHP $xx=1; ?>
<script language="javascript">
<?PHP print("var a=".$xx.";\n"); ?>
getCityList(a);
</script>

normalnie
Kod
var s = document.getElementById('dhtmlgoodies_country');
var val = s.options[s.selectedIndex].value;
getCityList(val);

pamiętaj teraz żeby przerobić samą funkcję ( chodzi tylko o jej początek ) zgodnie z tym co teraz będziesz do niej przekazywał.
blizniak
jesli chodzi o przerobienie tej funkcji to robie to tak
  1. function getCityList(sel)
  2. {
  3. var countryCode = sel.options[sel.selectedIndex].value;
  4.  
  5. if(countryCode.length>0)
  6. {
  7. countryCode = sel.options[sel.selectedIndex].value;
  8. }
  9. else
  10. {
  11. countryCode = sel;
  12. }
  13.  
  14.  
  15. document.getElementById('dhtmlgoodies_city').options.length = 0; // Empty city select box
  16. if(countryCode.length>0){
  17. ajax.requestFile = 'getCities.php?countryCode='+countryCode; // Specifying which file to get
  18. ajax.onCompletion = createCities; // Specify function that will be executed after file has been found
  19. ajax.runAJAX(); // Execute AJAX function
  20. }
  21. }

tylko ze nie dziala jak przekazuje jakas wartosc z php
Rafal Filipek
ehhh,
wywal to :
Kod
var countryCode = sel.options[sel.selectedIndex].value;

if(countryCode.length>0)
{
countryCode = sel.options[sel.selectedIndex].value;
}
else
{
countryCode = sel;
}

funkcje wywołuj tak jak podałem tutaj : http://forum.php.pl/index.php?showtopic=11...st&p=554836
żeby totalnie sobie ułatwić prace to zammień jeszcze :
Kod
function getCityList(sel)

na
Kod
function getCityList(countryCode)

lenistwo do potęgi setnej. ide o zaklad ze ani razu nie zrobiłes
Kod
alert(sel);
na początku funkcji żeby zobaczyć co sobie przekazujesz.
blizniak
ok dzieki ta funkcja juz chodzi jak powinna ale mam jeszcze jeden problem
jesli chodzi o wyswietlenie tego drugiego selecta
jezeli jest tak to wszystko smiga dobrze
  1. echo "obj.options[obj.options.length] = new Option('".$rzad1["nazwa"]."');
  2. ";

ale tutaj
  1. echo "obj.options[obj.options.length] = new Option('".$rzad1["nazwa"]."' '".($_SESSION['city_mini_search']==$rzad1["nazwa"]?'selected':'')."');
  2. ";

tutaj powinno zatrzymywac sie na tym select co zostal wczesniej wybrany ale nawet nie pokazuje mi zadnego miasta, jak to przerobic ?
moze trzeba cos tutaj zmienic a nie w tamtej linijce
  1. function createCities()
  2. {
  3. var obj = document.getElementById('dhtmlgoodies_city');
  4. eval(ajax.response); // Executing the response from Ajax as Javascript code
  5. }

questionmark.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.