Mam taki kod:
for(i in this.board.fields) { var row = this.board.fields[i]; //console.log(row); for(var j=1; j<row.length; j++) { var fieldRow = row[j].getRow(); var fieldNum = row[j].getNumber(); var self = this; row[j].canvasElement.click(function() { if(self.isMove) { self.move(fieldRow, fieldNum); self.isMove = false; } }); } }
Dokładniejsze wyjaśnienie co jest co zajęło by dużo czasu i wiele miejsca, więc na razie daję sam kod licząc na to, że obejdzie się bez tłumaczenia i będzie można z tego od razu wyciągnąć jakieś wnioski. Oczywiście, jeżeli zajedzie taka potrzeba, zaraz wszystko dokładnie wytłumaczę. W skrócie: Mam klasę Board(plansza), której zadaniem jest narysowanie ładnej planszy oraz parę operacji z nią związanych. Klasa ta posiada dwuwymiarową tablicę instancji klasy Field(pole). Teraz, każda instancja klasy Field posiada pole canvasElement. Kod, który przedstawiłem powyżej przechodzi po wszystkich polach tablicy pól i każdy element canvas wizualizujący pole łączy ze zdarzeniem click (korzystam z biblioteki wizualizacji Raphael). Problem polega na tym, że na samym końcu okazuje się, że którego pola bym nie kliknął, metoda move() zostaje wywołana zawsze dla tych samych argumentów - chodzi tutaj o zmienne fieldRow i fieldNum w 12. linijce. Są to wartości ostatniego pola w tablicy.
Wszystko działa w porządku do wywołania funkcji click. W ciele funkcji coś jest nie tak i tam staram się doszukać jakiegoś problemu.
Zapewne brzmi to bardzo nie składnie i chaotycznie, ale nie wiem jak w inny sposób mógłbym wytłumaczyć swój problem. Jestem mocno początkujący w JS, więc proszę o wyrozumiałość.
Z góry dzięki za każdą pomoc
