• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dropdown? Kod JS

Object Storage Arubacloud
0 głosów
221 wizyt
pytanie zadane 15 września 2019 w JavaScript przez Majonez.exe Gaduła (3,490 p.)

Wiecie jak poprawić ten kod żeby działał? Bo coś mi nie idzie z tym JS (proszę o łopatologiczne wytłumaczenie)

dropdown-btn.addEventListener("click", function(myFunction) {
document.getElementById("myDropdown").classList.toggle("show");
}
window.onclick = function(event) {
if (!event.target.matches('.dropdown-btn')) {
var dropdowns = document.getElementsByClassName("dropdown-content");
var i;
for (i = 0; i < dropdowns.length; i++) {
var openDropdown = dropdowns[i];
if (openDropdown.classList.contains('show')) {
openDropdown.classList.remove('show');
}
}
}
}

dropdown-btn.addEventListener("click", function(myFunction) { jest na pewno zle napisane i nie wiem jak, dużo szukałem i nic...

2 odpowiedzi

0 głosów
odpowiedź 15 września 2019 przez spamator12 Nałogowiec (28,230 p.)
edycja 16 września 2019 przez ScriptyChris
 
Najlepsza
dropdown-btn.addEventListener("click", function() // <- tutaj przekazujesz funkcje anonimowa - odnosnie [1@]
{
  document.getElementById("myDropdown").classList.toggle("show");
}

dropdown-btn.addEventListener("click", cosTam) // <- a jak nie chcesz anonimowej to funkcje przekazujesz tak - nazwa funkcji bez () - odnoscie [1@]

function cosTam()
{
  document.getElementById("myDropdown").classList.toggle("show");
}

// teraz tak, JS nie wie co to jest 'dropdown-btn' (tak jak naukowym jezykiem opisywal to Tomek) - nic mu to nie mowi, a wiec:

var element = document.getElementById("dropdown-btn"); // strzelam ze jest to ID a nie klasa (w przypadku klasy uzyj  document.getElementsByClassName("dropdown-btn");
//czyli teraz to bedzie wygladac tak:

element.addEventListener("click", function()
{
  document.getElementById("myDropdown").classList.toggle("show");
}

window.onclick = function(event)
{
  if (!event.target.matches('.dropdown-btn'))
  {
    var dropdowns = document.getElementsByClassName("dropdown-content");
    for (var i = 0; i < dropdowns.length; i++)
    {
      var openDropdown = dropdowns[i];
      if (openDropdown.classList.contains('show'))
      {
        openDropdown.classList.remove('show');
      }
    }
  }
}


// musisz dodac html w codepen/fiddlu jak chcesz aby zerknal jak wyglada reszta

komentarz 16 września 2019 przez Majonez.exe Gaduła (3,490 p.)

To jest to samo nadal... Nie wiem jak wytłumaczyć, może 

var elementb = document.getElementsByClassName("dropdown-btn2")[0];

usuń to z kodu i zobaczysz że nie działa :) wywołujesz nadal osobno każdy

komentarz 16 września 2019 przez spamator12 Nałogowiec (28,230 p.)
No ale chciales DWA dropdowny, nie? Jak ma byc jeden to poprzedni kod chyba dzialal poprawnie.
komentarz 16 września 2019 przez Majonez.exe Gaduła (3,490 p.)

Ciągle nie rozumiesz. Na tym kodzie co podajesz MAX działają 2 dropdowny a ja chcę żeby działała ich NIESKOŃCZONA liczba

komentarz 16 września 2019 przez spamator12 Nałogowiec (28,230 p.)

https://jsfiddle.net/spamator12/dqbkm1tv/ - musisz stargetowad boxa, ktory ma sie rozwinac. Skad JS ma wiedziec, ktore elementy rozwinac? To jest to co tlumaczyl Ci Tomek.

 

To nei mzoe wyglada cw ten sposob - https://jsfiddle.net/spamator12/pxcm07bf/

komentarz 16 września 2019 przez spamator12 Nałogowiec (28,230 p.)

przy czyms takim - rozwijac ci sie beda WSZYSTKIE listy - https://jsfiddle.net/spamator12/k9xnhuqt/

 

rozumiesz, ze to co chcesz zrobic, nei zadziala?

0 głosów
odpowiedź 15 września 2019 przez Tomek Sochacki Ekspert (227,510 p.)
Próbujesz zrobić operację matematyczną odejmowania wartości zmiennej dropdown od zwrotki metody addEventListener :)

Przypisz sobie np. do jakieś stałej referencję do elementu na którym chcesz nasłuchiwać eventu click i na tej referencji wywołaj metodę addEventListener. Dalej, funkcji zwrotnej przekazujesz jaki parametr nazwany myFunction ale nigdzie go nie używasz, po co on ma być?
komentarz 15 września 2019 przez Majonez.exe Gaduła (3,490 p.)
.dropdown-btn.addEventListener("click", function(myFunction) {
function myFunction() {
document.getElementById("myDropdown").classList.toggle("show");
}
}
window.onclick = function(event) {
if (!event.target.matches('.dropdown-btn')) {
var dropdowns = document.getElementsByClassName("dropdown-content");
var i;
for (i = 0; i < dropdowns.length; i++) {
var openDropdown = dropdowns[i];
if (openDropdown.classList.contains('show')) {
openDropdown.classList.remove('show');
}
}
}
}

Nie wiem coś takiego i nadal zle

komentarz 15 września 2019 przez Tomek Sochacki Ekspert (227,510 p.)
napisałem Ci przecież, że metoda addEventListener odpalana jest na referencji do obiektu DOM. Wiesz co to referencja bo używasz dalej metody getElementById, nie kopiuj kodu w ciemno tylko lepiej naucz się co dany fragment robi :)

Pobierz referencję np. getElementById, querySelector czy w dowolny inny sposób i na referencji wywołaj addEventListener... a tak na marginesie to zaglądałeś w ogóle do konsoli...? Zobacz... znajdziesz tam ciekawe informacje wprost mówiące gdzie jest błąd :)
komentarz 15 września 2019 przez Tomek Sochacki Ekspert (227,510 p.)
druga sprawa, po co w funkcji zwrotnej definiujesz kolejną funkcję? a sam callback zwraca undefined?
komentarz 15 września 2019 przez Tomek Sochacki Ekspert (227,510 p.)
komentarz 15 września 2019 przez Majonez.exe Gaduła (3,490 p.)
<style>

.dropdown-btn {
border: none;
transition: 500ms;
border-bottom: 1px solid #ccc !important;
background: #fff;
color: #000;
padding: 10px;
font-size: 16px;
cursor: pointer;
}

.dropdown-btn:hover {
transition: 500ms;
border-bottom: 1px solid #00a3a3 !important;
color: #00a3a3;
}

.dropdown {
position: relative;
display: inline-block;
}

.dropdown-content {
opacity: 0;
pointer-events: none;
top: -30px;
position: absolute;
transition: 500ms;
background-color: #fff;
min-width: 160px;
overflow: auto;
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
z-index: 1;
}

.dropdown-content li {
color: #000;
padding: 12px 16px;
text-decoration: none;
display: block;
cursor: pointer;
transition: 500ms;
}

.dropdown li:hover {
background-color: rgba(0, 0, 0, 0.05);
transition: 500ms;
}

.show {
display: block;
opacity: 1;
top: 0px;
transition: 500ms;
pointer-events: all;
}

</style>

<div class="dropdown">
<span class="dropdown-btn"  id="btn">Dropdown</span>
<div id="myDropdown" class="dropdown-content">
<li>Dropdown 1</li>
<li>Dropdown 2</li>
<li>Dropdown 3</li>
</div>
</div>

<script>
document.addEventListener("DOMContentLoaded", function() {
const btn = document.getElementById('btn');
document.getElementById("myDropdown").classList.toggle("show");
});}
}
window.onclick = function(event) {
if (!event.target.matches('.dropdown-btn')) {
var dropdowns = document.getElementsByClassName("dropdown-content");
var i;
for (i = 0; i < dropdowns.length; i++) {
var openDropdown = dropdowns[i];
if (openDropdown.classList.contains('show')) {
openDropdown.classList.remove('show');
}
}
}
}
</script>

Nwm...

Podobne pytania

0 głosów
1 odpowiedź 189 wizyt
pytanie zadane 29 sierpnia 2019 w JavaScript przez Majonez.exe Gaduła (3,490 p.)
0 głosów
1 odpowiedź 245 wizyt
pytanie zadane 25 sierpnia 2019 w JavaScript przez Pawel82 Użytkownik (740 p.)
0 głosów
1 odpowiedź 155 wizyt
pytanie zadane 17 grudnia 2019 w HTML i CSS przez Suweren6700 Nowicjusz (150 p.)

92,536 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,922 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...