![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 1 495 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Cześć.
W JS raczkuję. Mam taki skrypcik poniżej:
Skrypt wyswietla lub chowa diy w zalezności od tego co mamy wybrane w SELECT. Żadne rocket science. Ale teraz wypadałoby aby wartości book, dvd, furniture nie były wpisane ręcznie, ale żeby ładowały się z bazy. Obecnie w bazie mam 3 rodzaje produktów, ale jak będzie ich 300... ? Tak więc, jeśli rodzajów produktów będzie więcej to i case'ów powinno być automatycznie więcej. Jesli dodam do bazy rodzaj produktu 'sanki' no to powinien się dodać nowy case gdzie 'sankiFields' jest display:block a reszta ma 'none'. Oczywiście wiem jak to zrobić w php, ale wrzucanie phpa do pliku js, lub trzymanie skryptu js w pliku *.php to chyba nie jest najlepsza praktyka. Pomóżcie jak to zrobić po bożemu. Dzięki. Ten post edytował sadistic_son 3.01.2023, 12:20:07 -------------------- Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Generalnei sie zle za to zabrales. Nie tworzy sie dynamicznego switch...case tylko tworzy sie tablice/obiekt z informacjami co dany typ zawiera. I potem napodstawie tej tablicy sobie wyswietlasz/chowasz co tam chcesz.
I tak, taka tablice js buduje sie w php (czy tam systemie szablonow zalezy co masz) i w klada sie normalnie w kod strony html. I kolejna rzecz, to nie robi sie milion HIDEow tylko swoim elementom nadajesz jakas klase np class="dynamic-elements" i potem chowasz wssystkie elementy z ta klasa i pokazujesz tylko te dla wybranego selecta i juz. Znacznie mniej kodu i dziala zawsze No i na koniec: selector.addEventListener("click", () => { selector.addEventListener("change", () => { co to jest?? w clicku dodajesz event change? Po grzyba? Czemu poprostu nie zdefiniiujesz tego even change i juz. Pomijajac bezsens obecnej logiki, to na dodatek za kazdym razem jak klikasz w element to tworzysz kolejny event change i ostattecznie skonczysz z tysiacem eventow na stronie ![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 1 495 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
(...) I tak, taka tablice js buduje sie w php (czy tam systemie szablonow zalezy co masz) i w klada sie normalnie w kod strony html. ok, ale czy wrzucanie JS w html, zamiast w <head><script scr"skrypt.js" ... to nie jest zła praktyka? Normalnie miałbym to gdzieś, ale przy moim obecnym zadaniu best-practices są ważne. I kolejna rzecz, to nie robi sie milion HIDEow tylko swoim elementom nadajesz jakas klase np class="dynamic-elements" i potem chowasz wssystkie elementy z ta klasa i pokazujesz tylko te dla wybranego selecta i juz. Znacznie mniej kodu i dziala zawsze Dobra, czyli zamist id="dvdFields", id="bookFields" wszystkim im nadaję class="dynamicFields" oraz display:none, a potem tylko temu który mam wybrany w select nadaję display:block. Dobrze rozumiem? W takim razie jak odróżnię te wszystkie co mają być niewidoczne od tego jednego co jest wybrany w select? selector.addEventListener("click", () => { selector.addEventListener("change", () => { co to jest?? w clicku dodajesz event change? Po grzyba? Czemu poprostu nie zdefiniiujesz tego even change i juz. Pomijajac bezsens obecnej logiki, to na dodatek za kazdym razem jak klikasz w element to tworzysz kolejny event change i ostattecznie skonczysz z tysiacem eventow na stronie ![]() Ok, zrezygnowałem z tego, zostawiłem tylko change. Click było mi potrzebne po to, że pierwotnie chciałem aby przy pierwszym kilknięciu w select już wybierało mi wartość domyślną, ale ostatecznie dodałem dodatkowy option z wartością 'please choose' i jest gituś. -------------------- Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat ok, ale czy wrzucanie JS w html, zamiast w <head><script scr"skrypt.js" ... to nie jest zła praktyka? Normalnie miałbym to gdzieś, ale przy moim obecnym zadaniu best-practices są ważne. JA ci nie karze trzymac calego kodu js w pliku html. Ja ci tylko mowie, bys to co jest dynamiczne tylko wrzucil do html. Tak sie wlasnie robi. Cytat Dobra, czyli zamist id="dvdFields", id="bookFields" wszystkim im nadaję class="dynamicFields" oraz display:none, a potem tylko temu który mam wybrany w select nadaję display:block. Dobrze rozumiem? W takim razie jak odróżnię te wszystkie co mają być niewidoczne od tego jednego co jest wybrany w select? Id mozesz zostawic bo po ID bedziesz przeciez pokazywal wybrane pola. Klasa sluzy glownie do chowania wssytkiego naraz. Oczywiscie chowasz za kazdym razem gdy w select wybor sie zmieni. Cytat W takim razie jak odróżnię te wszystkie co mają być niewidoczne od tego jednego co jest wybrany w select? Noto mowie przeciez: chowasz zawsze wszystko co ma te klase, a pokazujesz tylko ten jeden co masz wybrany (po id) -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 495 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
No dobra, rozumiem co masz na mysli.
A więc tak wygląda fragmencik źródła strony: elementy 'dynamicFields' mają w css ustawione 'display:none' domyslnie, bo chcemy je wyświetlić tylko jeśli są wybrane w selekcie (zdeterminujemy to po ich ID). Do tego taki skrypcik:
Niestety w konsoli JS dostaję: Kod Uncaught TypeError: Cannot read properties of null (reading 'style') Czemu nie widzi tego elementu?
at HTMLSelectElement.<anonymous> (scripts.js:7:13) Ten post edytował sadistic_son 3.01.2023, 13:53:09 -------------------- Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Jesli zrobisz
console.log(dynamicFields); a mocno mnie rozczarowales ze jeszcze nei zrobiles, ![]() to zobaczysz ze to jest teraz tablica (ewentualnie NULL) a nie jeden element wiec nie mozesz zrobic dynamicFields.style.display = 'none'; -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 495 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Mam tych console logów tutaj pełno, z value, bez value, z dupami i bez
![]() ![]() Ten post edytował sadistic_son 3.01.2023, 14:08:34 -------------------- Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
skoro dynamicFields to tablica to lecisz po tablicy przy uzycui chocby FOR i zmieniasz style display dla kazdego elementtu tablicy. Tylko sie upewnij ze to tablica bo komunikat bledu jakby mowil ze to null?
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 1 495 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Ok, zaraz polecę pętlą, ale tymczasem dlaczego nawet w obecnej formie, po zmianie selecta na dowolną wartość cały czas jedynie wyświetla element o ID takim jak pierwsza wartość z option?
Tak jak by change zadziałał tylko jeden raz na początku. EDIT: oraz pętelka: Nic to niestety nie zmieniło ![]() Ten post edytował sadistic_son 3.01.2023, 14:18:38 -------------------- Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
No przeciez visible masz ustawic w change() a nie kilometr wczesniej
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 1 495 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
No przeciez visible masz ustawic w change() a nie kilometr wczesniej Aaaaaa, no taaak ![]() Działa dzięki ![]() -------------------- Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 11:41 |