turtelian
mireczki z #programowanie #programista15k #javascript
mam 15 elementów dla kazdego chce utworzyc addevent listener, jako ze chce to zrobic jakbym mial rigcz uzywam petli ale mam problm techniczny jak polaczyc nazwe zmiennej z licznikiem "i" xD

powiedzmy wygladalo by to tak :

dla jednego elementu :
var c0=document.getElementById('c0');
c0.addEventListener('click', function () {
revealCard(0)
});
dla wielu :
for (let i = 0; i < cards.length; i++) {
var c + i = document.getElementById('c' + i);
c + i.addEventListener('click', function () {
revealCard(i)
});

}

jak to zrobic jak sie laczy tego typou rzeczy ?
1
  • Najlepsze
  • Wszystkie komentarze
Marmite
@turtelian: a, spoko. Ale twój kod i tak by nie zadziałał w takiej postaci jakbyś nawet przerobił to na tablicę - wszystkie listenery robiłyby revealCard(cards.length-1) (każdy z takim samym argumentem) zamiast revealCard(i) (każdy z kolejnym) - w linku masz wyjaśnione dlaczego
2
turtelian
@turtelian: działa dzięki ! w koncu sie dowidzialem jak laczyc takie myki :)
1
makary89
makary89
@turtelian: poczytaj o delegacji eventow :)
1
Marmite
@turtelian: to jest absolutnie klasyczny problem JSowy wynikający z niezrozumienia jak działają zasięgi zmiennych w funkcjach anonimowych. Problem poruszany wiele razy, używaj opcji szukaj ( ͡° ͜ʖ ͡°) tutaj masz bardzo obszerne wyjaśnienie dlaczego jest tak a nie inaczej wraz z instrukcjami jak temu zapobiec: https://stackoverflow.com/a/750506/2148667
1
Marmite
@MQs: zgadza się, jest to jeden ze sposobów na lepsze podejście do tego problemu
1
Dzejkobini
Dzejkobini
@turtelian: A na co chcesz to "łączyć"?

var el = document.getElementById('c' + i);
if (null !== el)
{
el.addEventListener(...)
}
0
turtelian
@Dzejkobini: mam 21387 elementów i pisanie kazemu z reki ad event listenera uraga rigczowi w stopniu znacznym od tego sa petle od tego sa one.
0
p.....k
@turtelian: słyszałeś kiedyś o tablicach/kolekcjach? ( ͡º ͜ʖ͡º)
0
S.....l
S.....l
@turtelian:
document.querySelector(c${i}).addEventListener
0
S.....l
S.....l
@Senthill: w nawiasie miało być ``
0
turtelian
@Dzejkobini: nie ponimaju co tu sie stanelo( ͡° ʖ̯ ͡°)
@powaznyczlowiek: nie zrozumiales o co mi chodzi
@Senthill: dziekuje w sensie tak ? document.querySelector('c'${i}).addEventListener ?
i to jest jquery z tgoc o widze wiedz biblioteke trzeba zaimportowac
0
Dzejkobini
Dzejkobini
@turtelian: Lekka modyfikacja tego co zasugerowal @Senthill
document.querySelectorAll('[id*=c]').forEach((element, index) => element.addEventListener(...));
0
S.....l
S.....l
@turtelian: ES6, to nie Jq ogółem to document.querySelector(c${i}).addEventListener i to ma być w pętli :V
kurde wykop nie łapie tego
0
turtelian
@Senthill: document.querySelector(c${i}).addEventListener('click',function () {
revealCard(${i})
});
dobrze mysle ? ze przy parametrze funkcji tez wklepac $ przed i ? i wtedy bedzie ok
0
S.....l
S.....l
0
turtelian
@Senthill: nie dziala ( ͡° ʖ̯ ͡°)
moze opisze problem lepiej :
0
S.....l
S.....l
@turtelian: zapomniałem o # w nawiasach ( ͡° ͜ʖ ͡°)
0
turtelian
@Senthill: nie dziala dalej
mam 12 divów od c0-c12 kazdemu chce przypisac add event listenera na funkcje RC(0-12) oraz utworzyc zmienna ktora przechowuje tego diva ze tak powiem (var c0 = document.getElementById('c0');)

dla pierwszego elemntu to wyglada tak :
0
S.....l
S.....l
@turtelian: nie lepiej tablice ? :v x[i] = document.querySelector('c'+i);
0
turtelian
@Senthill: Failed to execute 'querySelector' on 'Document': '#c${i}' is not a valid selector.
0