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

jQuery on click argument dodany do funkcji jest błędny

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
+1 głos
382 wizyt
pytanie zadane 14 października 2021 w JavaScript przez Mruczekkk Nowicjusz (220 p.)

Chcę dodać funkcję przyjmującą 1 argument dla każdego elementu, robię to w pętli for, funkcja na zdarzenie on click jest faktycznie podpięta ale argument jest błędny. 

for( i=0; i< 10;i++)
{
    $('#c'+i).on("click", function() {mojafunkcja(i); } );
}
function mojafunkcja(nr)
{
    var nr=nr;
 }

Numer jaki wchodzi do funkcji nie ważne na który element kliknę zawsze jest 10. Nie rozumiem tego, dlaczego nie przypisuje prawidłowego argumentu dla 0 ->0 dla 1->1 itp. Jak przechodzę przez for to wszystko się zgadza, klikam na element i jest nr=10. Tak jakby brał ostatnią wartość "i".

komentarz 15 października 2021 przez VBService Ekspert (256,320 p.)
edycja 1 lutego 2022 przez VBService

Może spróbuj z each()

 

przykład

<div id="c0">--c0--</div>
<div id="c1">--c1--</div>
<div id="c2">--c2--</div>
<div id="c3">--c3--</div>
<div id="c4">--c4--</div>
<div id="c5">--c5--</div>

<style>
  div { margin: 1em; }
</style>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
$('[id^=c]').each(function(index) {
  $('#c'+index).on("click", function() {      
    mojafunkcja(index); 
  });
});
function mojafunkcja(nr)
{
  var nr=nr;
  console.log(nr);
}

 

CSS Selectors ]

1 odpowiedź

+2 głosów
odpowiedź 14 października 2021 przez ScriptyChris Mędrzec (190,190 p.)
wybrane 14 października 2021 przez Mruczekkk
 
Najlepsza

To chyba klasyczny przykład z asynchronicznym kodem w pętli, gdy używa się scope'u nie-blokowego. Zanim wykona się Twój kod, to pętla zdąży się wykonać w całości, więc będzie mieć wartość z ostatniej iteracji.

Zadeklaruj zmienną i słówkiem let lub owiń podpięcie click handlera w IIFE, co pozwoli domknąć scope dla zmiennej - wtedy przy obsłudze eventu i będzie mieć wartość z iteracji, w której handler został podpięty.

Podobne pytania

0 głosów
3 odpowiedzi 528 wizyt
0 głosów
3 odpowiedzi 571 wizyt
pytanie zadane 31 lipca 2018 w JavaScript przez Wyshak Początkujący (260 p.)
0 głosów
1 odpowiedź 284 wizyt
pytanie zadane 23 października 2019 w JavaScript przez Mavimix Dyskutant (8,420 p.)

93,173 zapytań

142,184 odpowiedzi

321,967 komentarzy

62,500 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 1149p. - dia-Chann
  2. 1131p. - Łukasz Piwowar
  3. 1124p. - CC PL
  4. 1118p. - Łukasz Eckert
  5. 1097p. - Michal Drewniak
  6. 1081p. - Marcin Putra
  7. 1076p. - rucin93
  8. 1054p. - Adrian Wieprzkowicz
  9. 1047p. - Piotr Aleksandrowicz
  10. 1036p. - Michał Telesz
  11. 1000p. - ssynowiec
  12. 992p. - Dominik Łempicki (kapitan)
  13. 967p. - rafalszastok
  14. 842p. - Dawid128
  15. 819p. - Mariusz Fornal
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...