Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][JavaScript]Case'y w JS w zależności od wartości w bazie
sadistic_son
post
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:
[JAVASCRIPT] pobierz, plaintext
  1. const dvdFields = document.getElementById('dvdFields');
  2. const bookFields = document.getElementById('bookFields');
  3. const furnitureFields = document.getElementById('furnitureFields');
  4. const selector = document.getElementById('productType');
  5.  
  6.  
  7. selector.addEventListener("click", () => {
  8. selector.addEventListener("change", () => {
  9. switch (selector.value) {
  10. case "DVD":
  11. dvdFields.style.display = 'block';
  12. bookFields.style.display = 'none';
  13. furnitureFields.style.display = 'none';
  14. break;
  15. case "Book":
  16. bookFields.style.display = 'block';
  17. dvdFields.style.display = 'none';
  18. furnitureFields.style.display = 'none';
  19. break;
  20. case "Furniture":
  21. furnitureFields.style.display = 'block';
  22. dvdFields.style.display = 'none';
  23. bookFields.style.display = 'none';
  24. break;
  25. default:
  26. furnitureFields.style.display = 'none';
  27. dvdFields.style.display = 'none';
  28. bookFields.style.display = 'none';
  29.  
  30. }
  31. });
  32. });
[JAVASCRIPT] pobierz, plaintext


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
sadistic_son
post
Post #2





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?
[JAVASCRIPT] pobierz, plaintext
  1. let selector = document.getElementById('productType');
  2. let visible = document.getElementById(selector.value);
  3. let dynamicFields = document.getElementsByClassName('dynamicFields');
  4.  
  5. console.log(selector);
  6. console.log(selector.value);
  7. console.log(visible);
  8. console.log(dynamicFields);
  9.  
  10. selector.addEventListener("change", () => {
  11. // dynamicFields.style.display = 'none';
  12. visible.style.display = 'block';
  13. })
[JAVASCRIPT] pobierz, plaintext

Tak jak by change zadziałał tylko jeden raz na początku.



EDIT:
oraz pętelka:
[JAVASCRIPT] pobierz, plaintext
  1. let selector = document.getElementById('productType');
  2. let visible = document.getElementById(selector.value);
  3. let dynamicFields = document.getElementsByClassName('dynamicFields');
  4.  
  5. console.log(selector);
  6. console.log(selector.value);
  7. console.log(visible);
  8. console.log(dynamicFields);
  9.  
  10. selector.addEventListener("change", () => {
  11. for (var i = 0; i < dynamicFields.length; i++) {
  12. let c = dynamicFields[i];
  13. c.style.display = 'none';
  14.  
  15. }
  16.  
  17. visible.style.display = 'block';
  18. })
[JAVASCRIPT] pobierz, plaintext
Nic to niestety nie zmieniło (IMG:style_emoticons/default/sad.gif)

Ten post edytował sadistic_son 3.01.2023, 14:18:38
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 16.10.2025 - 04:43