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%)
-----


No dobra, rozumiem co masz na mysli.

A więc tak wygląda fragmencik źródła strony:
  1. <select id="productType" name="productType">
  2. <option value="Book">Book</option>
  3. <option value="DVD">DVD</option>
  4. <option value="Furniture">Furniture</option>
  5.  
  6.  
  7. <div class="dynamicFields" id="Book">
  8. Weight (kg)<input type="text" name="weight" id="weight" />
  9. </label><br />
  10. <div class="productPropertyDescription">Please provide the weight of book in kg.</div>
  11. </div>
  12.  
  13. <div class="dynamicFields" id="DVD">
  14. Size (MB)<input type="text" name="size" id="size" />
  15. </label><br />
  16. <div class="productPropertyDescription">Please provide size of DVD in MB.</div>
  17. </div>

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

Niestety w konsoli JS dostaję:
Kod
Uncaught TypeError: Cannot read properties of null (reading 'style')
    at HTMLSelectElement.<anonymous> (scripts.js:7:13)
Czemu nie widzi tego elementu?

Ten post edytował sadistic_son 3.01.2023, 13:53:09
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: 18.10.2025 - 04:58