• 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

Object Storage Arubacloud
+1 głos
239 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 (254,610 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 409 wizyt
0 głosów
3 odpowiedzi 448 wizyt
pytanie zadane 31 lipca 2018 w JavaScript przez Wyshak Początkujący (260 p.)
0 głosów
1 odpowiedź 241 wizyt
pytanie zadane 23 października 2019 w JavaScript przez Mavimix Dyskutant (8,420 p.)

92,693 zapytań

141,605 odpowiedzi

320,103 komentarzy

62,051 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

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!

...