Dostarczenie funkcji w onclick zmiennej

0

Witam.
Mam taki kod:

 
$(document).ready(function() {
    for (var a in typesOfBrushes) {
        $("<img></img>")
                .attr({
            src: typesOfBrushes[a][0]
        }).width(16).height(16).click(function() {
            changeTool(typesOfBrushes[a][1]);
            console.log("Dziala");
        }).appendTo("#tools");
    }
});

Zauważyłem że linijka "changeTool(typesOfBrushes[a][1]);" zwraca null'a i chyba wiem dlaczego ^^
Przy wywoływaniu, funkcja nie ma już dostęp do zmiennej "a".
Co w takim razie muszę zrobić, żeby funkcja wiedziała który element tablicy wywołać?

0
Losiu22 napisał(a):

Zauważyłem że linijka "changeTool(typesOfBrushes[a][1]);" zwraca null'a i chyba wiem dlaczego ^^
Przy wywoływaniu, funkcja nie ma już dostęp do zmiennej "a".
Co w takim razie muszę zrobić, żeby funkcja wiedziała który element tablicy wywołać?

nie prawda że nie ma dostępu do zmiennej "a" - właśnie to jest piękne w domknięciach javascriptu że ma
tylko że to jest cały czas to samo "a" i w pętli się ciągle zmienia, a na końcu ustawia się na ostatnią wartość i tak właśnie będą ją widziały wszystkie funkcje wewnątrz

masz co najmniej dwa wyjścia:

  1. Bardziej logiczne:
    Zapisać do elementu do którego przypisujesz zdarzenie dodatkowe dane na podstawie "a" jeszcze w pętli tak samo jak przypisujesz "src":
$(new Image).data('typeOfBrush', typesOfBrushes[a])
  .attr(...)
   /* ... */
  .click(function() {
    var typeOfBrush = $(this).data('typeOfBrush');
    // tutaj odwołujesz się do typeOfBrush[1]
  });
  1. Mniej czytelne, bardziej zagmatwane, ale możesz tak i to jest fajne ;)
    Tworzyć funkcje dynamicznie
 /* ... */
       }).width(16).height(16).click((function(b) {
            return function() {
              changeTool(b);
              console.log("Dziala");
            }
        })(typesOfBrushes[a][1])).appendTo("#tools");
/* ... */

1 użytkowników online, w tym zalogowanych: 0, gości: 1