Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [js]Zmiana opcji w select po kliknięciu w link
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Adrian1207
Witam

Mam problem z pewnym dość obszernym formularzem. Aby był on czytelny i wygodny, stwierdziłem że najlepsze będzie użycie JS i tak zrobiłem, ale z jedną rzeczą mam kłopot. Mianowicie zmiana opcji w select po kliknięciu w odnośnik. Na początek użyłem takiego skryptu: SKRYPT
Wszystko byłoby dobrze, gdyby nie to, że zmiana contentu ma się odbyć po kliknięciu w link, a nie po wybraniu z innego selecta, więc spróbowałem zastosować skrypt który po kliknięciu w odnośnik zmieniał mi na wybraną pozycję pierwszego selecta, niestety przy takim rozwiązaniu ten drugi się nie aktualizował. Celem jest osiągnięcie tego, żeby user miał mapkę województw i obok listę <select> gmin w klikniętym województwie, czyli wchodzisz, masz mapkę na której jest mapa odnośników i po kliknięciu w jeden z odnośników po prawej bez przeładowania pokazuje Ci się lista gmin w tym województwie. Wszystko mam gotowe poza tym skrypcikiem. Pytanie moje jest takie, jak zmienić skrypt do którego link podałem tak aby można było ustawić href="java script: costam;" i taki odnośnik zmieniałby opcje w select?

Pozdrawiam
erix
Wywołaj updatecities() z parametrem z odpowiednim parametrem.

Cytat
href="java script: costam;

A cóż to za dziwoląg z poprzedniej epoki?

Kod
document.getElementById('link').onclick = function(e){ updatecities('parametr'); e.preventDefault(); }
Adrian1207
Ooo super smile.gif Działa i zmienia, póki co na mojej konstrukcji, która jest może nie na czasie, ale działa. Teraz pozostało listę tysięcy gmin wsadzić jakoś do tego cudeńka JS, no ale to już jakoś może sobie poradzę. Ogromne dzięki, jakby co to jeszcze będę pisał. A do Ciebie punkcik za pomoc już wędruje winksmiley.jpg
erix
Cytat
Teraz pozostało listę tysięcy gmin wsadzić jakoś do tego cudeńka JS, no ale to już jakoś może sobie poradzę.

No, nie radzę... Może teraz silniki JS są wydajniejsze, ale z tego, co kiedyś kiedyś czytałem, to przy tysiącach rekordów w tablicy JS engine się po prostu wykrzaczał albo mulił.

Lepiej pobieraj listę AJAX-em.
Adrian1207
Jest ich mniej więcej 2500-3000 podzielone na 16 tablic, więc myślę że jednak sobie to poradzi bez bardziej zaawansowanych rozwiązań...mam taką nadzieję, bo ja w tych technologiach działających po przeglądarce to nie mam zbyt dużej wiedzy i unikam tego.

Jeszcze jedno chciałem zapytać, bo skróciłem te tablice pozbywając się tego podzielenia treść|wartość i wpisałem same treści w takiej postaci:

Kod
cities[16]=[" Bochnia (M) "," Bochnia (W) "," Drwinia (W) "," Lipnica Murowana (W) ","......


i zastanawiam się jak teraz edytować dzielenie stringa w tej linii JS:

Kod
citieslist.options[citieslist.options.length]=new Option(cities[selectedcitygroup][i].split("|")[0], cities[selectedcitygroup][i].split("|")[1])


żeby nie próbowało dzielić, tylko przypisało to co jest w cudzysłowie jako i wartość i nazwa, bo teraz rozumie to jako nazwę a wartość w alercie wywala mi undefined.

Możesz jeszcze przy tym pomóc? smile.gif

Pozdrawiam i dzięki za dotychczasową pomoc, skrypt już działa więc mogę robić dalej a poprawki na czasie się stworzy. To było najważniejsze smile.gif
erix
Regexp. winksmiley.jpg
Albo dzielisz po nawiasie i wyciągasz tylko jeden znak z elementu o indeksie 1.
Adrian1207
Tylko nic mi po jednym znaku w wartości, pasowało by mi usunięcie w ogóle podziału, a zapisanie stringa jako taką samą wartość i nazwę. Np. jak w html jest <option>costam</option> to przypisuje to co jest między tagami jako wartość, i tak tutaj bym chciał tylko JS wszystko komplikuje tongue.gif
erix
Cytat
to przypisuje to co jest między tagami jako wartość, i tak tutaj bym chciał tylko JS wszystko komplikuje

A konkretniej? Nie mogę jakoś wywnioskować problemu z Twojej. Ja podałem dwa możliwe rozwiązania, pierwszego jakbyś nie dostrzegł. tongue.gif
Adrian1207
Najlepiej to Ci chyba przekażę przykładem w php, pewnie tak się najlepiej zrozumiemy tongue.gif
  1. <?php
  2. $miasto="Bochnia (M)";
  3. ?>
  4. <select name="cities">
  5. <option value="<?php echo $miasto; ?>"><?php echo $miasto; ?></option>
  6. </select>


Czyli żeby value było takie same jak to co między <option> smile.gif

A podając w tablicy tego skryptu js coś bez |value opcje te w ogóle nie mają ustawionego value i nie ma jak odczytać wyboru. A jak po każdym mieście dodam kreskę pionową i drugi raz nazwa miasta to raz że tablice będą 2 razy większe a dwa, że zajmie mi to z kilka godzin kopiowania tongue.gif

A co do pierwszego podanego przez Ciebie rozwiązania, to widziałem, ale to nadal jest do wyrażeń regularnych a ja sie chce ich właśnie pozbyć.

Wileki dzięki jeszcze raz za zainteresowanie i dotychczasową pomoc smile.gif
erix
http://www.w3schools.com/HTMLDOM/met_select_add.asp

Jak dodać do tego value, to chyba wiesz. winksmiley.jpg O ile - oczywiście - o to chodzi. Bo dalej nie wiem, czy masz problem z tym (M), czy ze zduplikowaniem etykietki opcji do wartości.
Adrian1207
Już za chwilę będę studiował to z tego linka, a przed tym jeszcze raz spróbuję wyjaśnić smile.gif Nie wiem skąd Ci się wzięło, że ja mam problem z tym (M), bo sprawdzam teraz i nigdzie czegoś takiego nie pisałem, (M) lub (W) oznacza miast lub wieś i nie jest przy każdym stringu, bo są np. jeszcze osiedla. Nie bardzo wiem skąd wywnioskowałeś, że z tym mam problem, to jest tylko część nazwy opcji. Chodzi mi dokładnie o to drugie co napisałeś, zduplikowanie etykiety opcji do wartości nadal w tym skrypcie który podałem w pierwszym poście.

Edit:
Poradziłem sobie z tym smile.gif Wydawało się trudniejsze, ale poszło łatwo, wystarczyło usunąć split z definiowania nowej opcji.

Dzięki wielkie erix za pomoc smile.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.