Podwójna lista rozwijana

HTML to podstawy w dziedzinie tworzenia stron WWW, Style CSS warto opanować, bowiem za ich pomocą można dostosować odpowiednio wygląd swojej witryny WWW. Zagłębiamy się dalej i udostępniamy w tym forum możliwość zadawania pytań o JavaScript.
ODPOWIEDZ
szelbisz
Nowy
Nowy
Posty: 38
Rejestracja: wt paź 31, 2006 7:39 pm

Podwójna lista rozwijana

Post autor: szelbisz »

Witam
Chciałem zrobić formularz w którym zawartość drugiej listy rozwijanej jest zależna od wartości ustawionej w pierwszej liście.
Ma ktoś jakiś pomysł jak to zrobić ? Bo mi już zabrakło pomysłów.
Z góry dzieki za podpowiedzi (lub odpowiedzi :) ).
123456
Zaczyna działać
Zaczyna działać
Posty: 514
Rejestracja: sob paź 28, 2006 1:19 pm

...

Post autor: 123456 »

Wszystko zalezy od tego co Ty potrafisz. Wystarczy dynamicznie zmieniac zawartosc listy. Polecam w JS bedzie łatwiejsze. Nie jestem pewien czy według Ciebie "lista rozwijana" to znacznik SELECT bo tego nie napisales. Jesli tak to:

Kod: Zaznacz cały

nazwaobj.options[0] = new Option("Biały");
nazwaobj.options[0].value = "kolor";
Oczywiscie nazwaobj to jest zmienna z referencja do obiektu. Wystarczy opakowac to pętelką z tablicy pobierac kolejne elementy. Wywolanie funkcji aktualizujacej zawartosc listy przez jakies zdarzenie w drugiej liście. I po sprawie.

Jesli nie chodzilo o ten obiekt, to napisz dokladnie co to jest "lista rozwijana".
koziolek
Przelotem
Przelotem
Posty: 387
Rejestracja: sob paź 21, 2006 10:07 pm
Kontakt:

Re: Podwójna lista rozwijana

Post autor: koziolek »

Popierwsze jest to dośc trudne...
Po drugie klasa która to robi musi:
Zapewniać znikanie selektów, po zmianie wartości w pierwszym. Pojawianie się konkretnego selecta.
Powinna pracować na id lub class.

[edit]
Kod podrzucę później (jutro lub w niedzielę)...
szelbisz
Nowy
Nowy
Posty: 38
Rejestracja: wt paź 31, 2006 7:39 pm

Re: Podwójna lista rozwijana

Post autor: szelbisz »

Dobra już nie trzeba, kumpel mi pomógł. A chodziło mi o coś takiego:
<form id="formID" action="szabla.php" method="POST">
<?$select1V=$_POST['select1'];
?>
<select name="select1" onchange="getElementById('formID').submit();">
<option value="">--Wybierz--</option>
<?if($select1V=="o1"){
echo '<option value="o1" selected>o1</option>';
}else{
echo '<option value="o1">o1</option>';
}
if($select1V=="o2"){
echo '<option value="o2" selected>o2</option>';
}else{
echo '<option value="o2">o2</option>';
}
?>
</select>
<select name="select2">
<?if($select1V=="" || select1V==null){
echo '<option value="">--Wybierz--</option>';
}else if($select1V=="o1"){
echo '<option value="o11">Opcja dla 1 nr 1</option>';
echo '<option value="o12">Opcja dla 1 nr 2</option>';
echo '</select>';
}else if($select1V=="o2"){
echo '<option value="o21">Opcja dla 2 nr 1</option>';
echo '<option value="o22">Opcja dla 2 nr 2</option>';
echo '</select>';

}
?>
</select>
</form>
atom
Nowy
Nowy
Posty: 145
Rejestracja: wt gru 20, 2005 1:55 pm
Kontakt:

Re: Podwójna lista rozwijana

Post autor: atom »

No tak, tylko Twoje rozwiązanie jest serwer-side i wymaga przeładowania strony. Czasem lepiej (np. gdy odświeżenie strony może trwać długo) tego typu operacje robić po stronie klienta - może więcej z tym roboty, ale mniej frustracji u użytkownika końcowego.
koziolek
Przelotem
Przelotem
Posty: 387
Rejestracja: sob paź 21, 2006 10:07 pm
Kontakt:

Re: Podwójna lista rozwijana

Post autor: koziolek »

Popieram przedmówcę... metoda która przedstawiłeś jst bardzo ze tak powiem toporna i mało wydajna... mozna generować to po stronie serwera, ale żeby nie spowalniało działania trzeba uzyć AJAXa...

Zamiana po stronie klienta jest szybsza a przy odpowiedniej implementacji samej klasy która to robi znacznie wydajniejsza..
123456
Zaczyna działać
Zaczyna działać
Posty: 514
Rejestracja: sob paź 28, 2006 1:19 pm

...

Post autor: 123456 »

Jesli nie o to chodzilo to trudno. Dziala w FF 1.0.7, Operze 8.5x, IE 6.0 sp2. Na podstawie tego co mozna wyczytac z kodu, ktory podales wyszedl bardzo prosty kod:

Kod: Zaznacz cały

<form id="formID" action="somewhere.php" method="post">

<select name="select1" onchange="aktualka(this);">
<option value="">--Wybierz--</option>
<option value="o1">o1</option>
<option value="o2">o2</option>
</select>

<select name="select2" id="select2">
<option value="">--Wybierz--</option>
</select>

</form>

<script type="text/javascript">
var opcje_dla_1 = new Array ("Opcja dla 1 nr 1","Opcja dla 1 nr 2");
var opcje_dla_2 = new Array ("Opcja dla 2 nr 1","Opcja dla 2 nr 2");
var v_alue_dla_1= new Array ("o11","o12");
var v_alue_dla_2= new Array ("o21","o22");

function aktualka(obj){

	var what = obj.value;
	var select2 = document.getElementById('select2');

	var dlugosc_dla_1 = opcje_dla_1.length-1;
	var dlugosc_dla_2 = opcje_dla_1.length-1;
	
	if(what == "o1"){

		select2.options.length = dlugosc_dla_1.length;
		for(var i=0;i<=dlugosc_dla_1;i++){
			select2.options[i] = new Option(opcje_dla_1[i]);
			select2.options[i].value = v_alue_dla_1[i];
		}

	} else if(what == "o2"){

		select2.options.length = dlugosc_dla_2.length;
		for(var i=0;i<=dlugosc_dla_2;i++){
			select2.options[i] = new Option(opcje_dla_2[i]);
			select2.options[i].value = v_alue_dla_2[i];

		}


	} else {
		select2.options.length = 1;
		select2.options[0] = new Option("--Wybierz--");
		select2.options[0].value = "";
	}

}
</script>
trzeba uzyć AJAXa...
(...)
samej klasy która to robi znacznie wydajniejsza..
(...)
może więcej z tym roboty,
(...)
Popierwsze jest to dośc trudne...
Po drugie klasa która to robi musi:
Zapewniać znikanie selektów, po zmianie wartości w pierwszym. Pojawianie się konkretnego selecta.
Powinna pracować na id lub class.
Czy trzeba od razu sobie utrudniac zycie z klasami, AJAX'em i PHP? Gdybym mial do takich pierdół robic klasy to mialbym 2x wiekszy kod. Tylko po co mam tracic czas nad wymyslaniem ładnej nazwy klasy skoro mozna to zrobic na jednej funkcji? Jesli chcecie zarabiac duza kase na programowaniu to zacznijcie myslec jak programowac, zeby sie duzo nie narobic a jednak duzo zrobic i zarobic. Tego ucza na pierwszym roku studiow. Radze wrocic do szkoly. Takie jest moje zdanie o poprzednich postach.
koziolek
Przelotem
Przelotem
Posty: 387
Rejestracja: sob paź 21, 2006 10:07 pm
Kontakt:

Re: Podwójna lista rozwijana

Post autor: koziolek »

Jesli chcecie zarabiac duza kase na programowaniu to zacznijcie myslec jak programowac, zeby sie duzo nie narobic a jednak duzo zrobic i zarobic. Tego ucza na pierwszym roku studiow. Radze wrocic do szkoly. Takie jest moje zdanie o poprzednich postach.
Cóż... aż przyjdzie dzień kiedy będziesz chciał coś przerobić... lub wykorzystać kod w innym miejscu, lub będziesz potrzebował kilku takich konstrukcji na jednej stronie... Wtedy bedziesz musiał powielać kod, bo:
Na sztywno wszyłeś konfigurację w funkcję
Nie podzieliłeś kodu na mniejsze moduły

Co do nauki. Niechęć do programowania obiektowego, projektowania pod kątem powtórnego wykorzystania kodu i jego uniwersalizacji zazwyczaj jest świetnym przygotowaniem do nauki... na błędach... i to zazwyczaj osoby która tak pisze kod.
Napisanie kilku klas nie jest aż tak czasochłonne jak się wydaje. Dodatkowo oszczędzasz czas na póxniejszym przystosowaniu kodu do nowych wymagań...

Co zaś do przedstawionego przez Ciebie przykładu to użytkownik poprostu oleje stronę która po każdym kliknieciu w selecta zaczyna się mozolnie przeładowywać....
123456
Zaczyna działać
Zaczyna działać
Posty: 514
Rejestracja: sob paź 28, 2006 1:19 pm

....

Post autor: 123456 »

Co zaś do przedstawionego przez Ciebie przykładu to użytkownik poprostu oleje stronę która po każdym kliknieciu w selecta zaczyna się mozolnie przeładowywać....
Czy gdzies w kodzie ktory podalem nastepuje przeladowanie strony? Raczej nie. Poczytaj dokladnie.
Cóż... aż przyjdzie dzień kiedy będziesz chciał coś przerobić... lub wykorzystać kod w innym miejscu, lub będziesz potrzebował kilku takich konstrukcji na jednej stronie... Wtedy bedziesz musiał powielać kod, bo:
Na sztywno wszyłeś konfigurację w funkcję
Nie podzieliłeś kodu na mniejsze moduły
Zauwaz, ze szelbisz chcial konkretna odpowiedz jak mozna zrobic dynamiczna liste. Nie prosil o klase, ktora bedzie w jakims systemie portalowym ale o jedna, konkretna rzecz. Czy w innych postach, gdy ktos prosi o pomoc to oczekuje calej klasy, ktora sprawdzi sie na kazdej stronie? Nie zawsze. Dlaczego wiec kwestionujesz mojego posta tylko dlatego, ze nie napisalem calej klasy, ktora pozniej kazdy kopiowalby do wlasnych celow? Chcesz to sobie napisz klase.:roll:
Co do nauki. Niechęć do programowania obiektowego, projektowania pod kątem powtórnego wykorzystania kodu i jego uniwersalizacji zazwyczaj jest świetnym przygotowaniem do nauki... na błędach... i to zazwyczaj osoby która tak pisze kod.
Codziennie w programowaniu stosuje klasy. To normalne. Wiem, ze sa swietne i ulatwiaja zycie ale tutaj nie ma sensu pisac calej klasy. A co do zmian, to wcale nie jest tak trudno jakies wprowadzic.
koziolek
Przelotem
Przelotem
Posty: 387
Rejestracja: sob paź 21, 2006 10:07 pm
Kontakt:

Re: Podwójna lista rozwijana

Post autor: koziolek »

Wiem, ze sa swietne i ulatwiaja zycie ale tutaj nie ma sensu pisac calej klasy
sens zawsze jest.
A co do zmian, to wcale nie jest tak trudno jakies wprowadzic.
osoba wykorzystująca cudzy kod zawsze bedzie miała prob,eny z wprowadzeniem zmian...
dlatego zapraszam tu:
http://www.koziolekweb.yoyo.pl/?p=7
ODPOWIEDZ