Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] Tooltip dla listy elementów
Forum PHP.pl > Forum > Przedszkole
php11
Cześć,

Zrobiłem tooltip, ale działa tylko dla pierwszego elementu.
Co robię źle?

  1. .divID {
  2. position: relative;
  3. }
  4. label {
  5. display: block;
  6. z-index: 0;
  7. padding-left: 110px;
  8. }
  9. span {
  10. position: absolute;
  11. top: 0;
  12. left: 0;
  13. right: 0;
  14. bottom: 0;
  15. z-index: 1;
  16. }
  17. .css_tooltip {
  18. position: absolute;
  19. left: 150px;
  20. top: 0;
  21. }
  22.  
  23. <div class="pojemnik">
  24. <div class="divID" id="id_diva_11">
  25. <input type="radio" data-id="11">
  26. <span id="span_11">kolor biały</span>
  27. </label>
  28. </div>
  29. <div class="divID" id="id_diva_22">
  30. <input type="radio" data-id="22">
  31. <span id="span_22">kolor żółty</span>
  32. </label>
  33. </div>
  34. <div class="divID" id="id_diva_33">
  35. <input type="radio" data-id="33">
  36. <span id="span_33">kolor niebieski</span>
  37. </label>
  38. </div>
  39. </div>


  1.  
  2. // ustawiam pojemnik
  3. const zmienna_pojemnik = document.querySelector('.pojemnik');
  4. const zmienna_div_otaczajacy = document.querySelector(".divID");
  5. const najechany = zmienna_div_otaczajacy;
  6.  
  7. zmienna_div_otaczajacy.addEventListener( "mouseover", (event) => {
  8.  
  9. event.target.style.color = "red";
  10.  
  11. zmienna_kolor = najechany.querySelector("span").innerHTML;
  12.  
  13. // tworze nowy div
  14. const zmienna_tooltip = document.createElement("div");
  15. let counter = 0;
  16. zmienna_tooltip.classList.add("css_tooltip");
  17. zmienna_tooltip.style.background = 'yellow';
  18. zmienna_tooltip.style.color = "black";
  19. zmienna_tooltip.innerText = zmienna_kolor;
  20.  
  21. // dodaje na koniec
  22. const div = najechany;
  23. div.appendChild(zmienna_tooltip);
  24.  
  25. });
  26.  
  27. zmienna_div_otaczajacy.addEventListener( "mouseout", (event) => {
  28. event.target.style.color = "";
  29. const zmienna_do_usuniecia = document.querySelector(".css_tooltip");
  30. zmienna_do_usuniecia.remove();
  31. },
  32. false
  33. );


Z góry dziękuję za pomoc
trueblue
Zdarzenia dodajesz wyłącznie do jednego elementu.
Zapoznaj się z dokumentacją:
https://developer.mozilla.org/en-US/docs/We...t/querySelector
https://developer.mozilla.org/en-US/docs/We...uerySelectorAll
php11
Dzięki za odpowiedź, zmodyfikowałem kod:
  1. const zmienna_pojemnik = document.querySelectorAll(".pojemnik .divID");
  2.  
  3. for (let zmienna_najechany of zmienna_pojemnik) {
  4. zmienna_najechany.addEventListener( "mouseover", (event) => {
  5. zmienna_najechany.style.background = 'red';
  6. zmienna_kolor = zmienna_najechany.querySelector("span").innerHTML;
  7. // tworze nowy div
  8. const zmienna_tooltip = document.createElement("div");
  9. zmienna_tooltip.classList.add("css_tooltip");
  10. zmienna_tooltip.style.background = 'yellow';
  11. zmienna_tooltip.style.color = "black";
  12. zmienna_tooltip.innerText = zmienna_kolor;
  13. // dodaje na koniec
  14. zmienna_najechany.appendChild(zmienna_tooltip);
  15. });
  16.  
  17. zmienna_najechany.addEventListener( "mouseout", (event) => {
  18. zmienna_najechany.style.background = '';
  19. event.target.style.color = "";
  20. const zmienna_do_usuniecia = document.querySelector(".css_tooltip");
  21. zmienna_do_usuniecia.remove();
  22. },
  23. false
  24. );
  25. }
  26.  


Trzecia edycja, ale się udało ;-)

Moze można to jakoś lepiej zrobić?
trueblue
Można, używając zdarzeń delegowanych.
Podpinasz wtedy obsługę zdarzenia do jednego elementu (nadrzędnego dla wszystkich, do których obecnie dodajesz) i tam sprawdzasz na jakim potomnym elemencie zaszło zdarzenie, jeśli to element, który oczekujesz, to obsługujesz zdarzenie.
https://www.google.com/search?q=delegated+events+js
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.