![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 358 Pomógł: 0 Dołączył: 19.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Próbuje zrobić wybór kategorii zależny od wyboru poprzedniego selecta. Mam formularz:
i ajax:
takie coś ładuje mi ładnie podkategorie zależne od wyboru kategorii głównej. Problem w tym, że te podkategorie mają jeszcze swoje podkategorie i wtedy jak pojawi mi się drugi select to już nie ładuje dalej po wyborze jakiejś opcji :/ tak samo drugi select (ten który się pojawił) nie reaguje już naawet na:
W select.php tworzę sobie ten select a opcje do niego pobieram z bazy... |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 90 Pomógł: 4 Dołączył: 14.02.2015 Ostrzeżenie: (0%) ![]() ![]() |
miałem podobny problem, przy dynamicznym ładowaniu treści, że zdarzenia w nowych polach formularza nie działają.
Sposobem na to jest przypisanie zdarzenia (w twoim przypadku .on ) po załadowaniu pola formularza, należy jednak pamiętać, że podwójne bindowanie zdarzenia spowoduje efekt tzw. podwójnego kliknięcia, później potrójnego itp ![]()
następnie w twoim kodzie w miejscu:
mam nadzieję, że to pomoże : ) Ten post edytował freewalker 17.02.2015, 22:07:20 |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 1 270 Pomógł: 184 Dołączył: 7.10.2012 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Nie rozumiem do eventu change uzywasz jquery a do ajaxu uzywasz sposobu ktorego juz sie nie uzywa(po co sobie komplikowac).
Ten post edytował rad11 17.02.2015, 22:18:39 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 358 Pomógł: 0 Dołączył: 19.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
@rad11, to jest akurat najmniej ważne. Najważniejsze że działa, później i tak to zmienię
sprytne, działa ![]() z tym, że dopiero po drugim kliknięciu załapuje, później już normalnie. O co biega ![]()
Ten post edytował d.stp 17.02.2015, 22:27:23 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 90 Pomógł: 4 Dołączył: 14.02.2015 Ostrzeżenie: (0%) ![]() ![]() |
nie działa bo binduje zdarzenie dopiero po pierwszej zmianie pola, załaduj to na samym starcie a resztę usuń, jak w poniższym przykładzie : )
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 358 Pomógł: 0 Dołączył: 19.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Ogarnąłem już wcześniej, ale i tak dzięki.
Teraz dopiero mam zagadkę... Zrobiłem tak, że po wybraniu kategorii głównej pokazuje się kolejny select z opcjami gdzie kategoria_glowna == opcja_wybrana, działa. Problem w tym że ten skrypt co mam teraz działa na takiej zasadzie że w miejscu selecta, który pojawił się po wybraniu selecta głównego pokazuje się inny select, a stary znika. Zmieniłem więc kod: document.getElementById("cats_join").innerHTML = xmlhttp.responseText; Na: $('#cats_join').append(xmlhttp.responseText); i efekt osiągnięty, ale jak wybiorę sobie np. kategorie główną, później jej podkategorie, a następnie jeszcze jedną podkategorie tej wcześniejszej i dalej zmienie np. podkategorie to zamiast chciałbym żeby znikały mi wszystkie selecty które są > kategorii klikniętej, bo teraz za każdym wybraniem kategorii pojawia się kolejny select i tak w kółko.. ![]() @rad11, wiem o tym, ale to jest tylko żeby działałol później i tak to będę zmieniał Jakiś pomysł? |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 90 Pomógł: 4 Dołączył: 14.02.2015 Ostrzeżenie: (0%) ![]() ![]() |
no tak, przez appenda dopisujesz ciągle nową treść, w takim przypadku rozwiązałbym to numerowaniem poziomu kategorii w selectach, np:
kategoria główna = lvl 1 podkategoria = lvl 2 podkategoria podkategorii = lvl 3 Zaczynając od założenia zmiennej globalnej w kodzie JS: var max_levels=1; // 1 jak tylko główna kategoria jest zaladowana, każde rozwinięcie spowoduje inkrementację o +1 wymaga też to zmodyfikowania trochę HTMLa dla znacznika select, dodaj atrybut lvl z najnizszym poziomem (w naszym przypadku 1)
kazdy kolejny select generowany przez skrypt powinien miec zwiekszany atrybut lvl o 1 (az do poziomu maksymalnego danej kategorii), czyli wstawiamy selecta appendem, odnajdujemy ostatnio dodanego w tym divie i zmieniamy jego atrybut lvl uprzednio zwiększając zmienną max_levels o 1; u ciebie w kodzie będzie to chyba w tym miejscu:
modyfikujemy też odpowiednio funkcję binder i dodajemy funkcję usuwającą niepotrzebne podkategorie
mam nadzieję, że działa bo tak na sucho ciężko się pisze i nie wiadomo czy gdzieś byka nie postawiłem : ) ale chyba najważniejsze, żebyś załapał logikę a na pewno sobie poradzisz Ten post edytował freewalker 17.02.2015, 23:52:34 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 10:09 |