Mam problem dość specyficzny (a może po prostu zbyt duże wymagania co do funkcjonalności i możliwości JS oraz jQuery). Oto mój fragment kodu, dalej opiszę co chciałbym osiągnąć po modyfikacji.
for (i = 1; i <= 15; i++){ rad = document.getElementsByName('question'+i); id = '#next' + i; for (j = 0; j < rad.length; ++j){ rad[j].addEventListener('click', function(){ $(id).removeAttr('disabled'); }); } }
Po kolei. W HTMLu mam formularz. Składa się z kilku pytań, w każdym typem inputów jest "radio" i mają nazwy question1, question2 ... Pod pytaniami widnieje przycisk, dzięki któremu możemy przejść do kolejnego etapu (id kolejnych buttonów: next1, next2 ...) jednak wstępnie ukryty. Chce dodać opcję, że po kliknięciu na dowolny radio input z pytania i-tego, uruchamia on możliwość kliknięcia i-tego buttona przechodzącego do następnego pytania. Realizują to powyższe pętle: dla kolejnych "i" pytań zlicza ile jest inputów w każdym (zmienna rad jest tablicą tychże elementów) i do każdego dodaje uruchamianie funkcji (linia 6) na zdarzenie "onClick". Tu pojawia się problem...
Co chciałbym osiągnąć:
Podczas każdorazowego wykonywania się linii 5 do konkretnego radio buttona powinna być przypisana funkcja, która usuwa atrybut "disabled" z KONKRETNEGO przycisku next, czyli tego, którego id aktualnie znajduje sie w zmiennej "id" (powstaje ono w linii 3).
Przykład: odpowiedzi z question1 uruchamiają przycisk next1, odpowiedzi z question2 uruchamiają przycisk next2 itd...
Co się dzieje:
Funkcja anonimowa opisana w linijce 6 rzeczywiście jest przypisana do odpowiednich radio inputów. Jednak nie zapisuje ona id takiego jakbym to chciał (czyli tego, który akurat jest przechowywany w zmiennej "id" w momencie wykonywania instrukcji) lecz zmienną. W efekcie, po przejściu całej pętli zewnętrznej (w moim przypadku gdy "i" już nie spełnia warunku i<=15) końcowa wartość zmiennej id jest "next15", przez co każdy wybór opcji w dowolnym pytaniu ujawnia przycisk zatwierdzający ostatnie pytanie.
Przykład: odpowiedzi z question1 uruchamiają przycisk next15, odpowiedzi z question2 uruchamiają przycisk next15 itd...
Wiem, że można by po prostu (choć jeszcze szczerze nie testowałem tego tak) na sztywno dopisać do każdego jednego z inputów w HTMLu atrybut onClick, jednak chciałem by kod był bardziej estetyczny, poza tym przy dużej liczbie pytań i możliwości odpowiedzi jest to pracochłonne i mało skalowalne w przyszłości. Wierzę, że odrobinę modyfikując to, co powyżej napisałem w JS można obejść ten problem.
Moje pytanie brzmi: jak to zrobić?
