grisha_sychev
@grisha_sychev
Developer PHP, Symfony

Как создать цикл for или while, без потери инкрементных значений между циклами?

Есть массив, допустим он будет с вопросами, пример:

let questions = [ 
'Вам грустно или вы в плохом настроении?',
'Чувствуете грусть, удручены?',
'Чувствуете уныние?',
'Испытываете чувство безнадежности?'
]

Также есть такой вот блок с вопросом:

<div class="cont question0">
        <span class="que">1/25 Вам грустно или вы в плохом настроении?</span>
        <input id="q0" type="radio" value="0" data-id="1" class="quest" name="question-1">
        <label for="q0">Ни разу</label>
        <input id="q1" type="radio" value="1" data-id="1" class="quest" name="question-1">
        <label for="q1">Иногда</label>
        <input id="q2" type="radio" value="2" data-id="1" class="quest" name="question-1">
        <label for="q2">Умеренно</label>
        <input id="q3" type="radio" value="3" data-id="1" class="quest" name="question-1">
        <label for="q3">Часто</label>
        <input id="q4" type="radio" value="4" data-id="1" class="quest" name="question-1">
        <label for="q4">Крайне часто</label>
        <button class="button but1" data-id="1" disabled>Следующий вопрос</button>
      </div>

Нужно прогнать данный блок по массиву.

Проблема заключается в следующем.

Этот блок имеет атрибут id="q0" и for="q0", в течении всех циклов он должен инкрементироваться на одну единицу, выходя за рамки одного блока, чтобы было более понятней, вот сам пример должного результата:

<div class="cont question0">
        <span class="que">1/25 Вам грустно или вы в плохом настроении?</span>
        <input id="q0" type="radio" value="0" data-id="1" class="quest" name="question-1">
        <label for="q0">Ни разу</label>
        <input id="q1" type="radio" value="1" data-id="1" class="quest" name="question-1">
        <label for="q1">Иногда</label>
        <input id="q2" type="radio" value="2" data-id="1" class="quest" name="question-1">
        <label for="q2">Умеренно</label>
        <input id="q3" type="radio" value="3" data-id="1" class="quest" name="question-1">
        <label for="q3">Часто</label>
        <input id="q4" type="radio" value="4" data-id="1" class="quest" name="question-1">
        <label for="q4">Крайне часто</label>
        <button class="button but1" data-id="1" disabled>Следующий вопрос</button>
      </div>
      <div class="cont question1">
        <span class="que">2/25 Чувствуете грусть, удручены?</span>
        <input id="q5" type="radio" value="0" data-id="2" class="quest" name="question-2">
        <label for="q5">Ни разу</label>
        <input id="q6" type="radio" value="1" data-id="2" class="quest" name="question-2">
        <label for="q6">Иногда</label>
        <input id="q7" type="radio" value="2" data-id="2" class="quest" name="question-2">
        <label for="q7">Умеренно</label>
        <input id="q8" type="radio" value="3" data-id="2" class="quest" name="question-2">
        <label for="q8">Часто</label>
        <input id="q9" type="radio" value="4" data-id="2" class="quest" name="question-2">
        <label for="q9">Крайне часто</label>
        <button class="button but2" data-id="2" disabled>Следующий вопрос</button>
      </div>
  • Вопрос задан
  • 85 просмотров
Пригласить эксперта
Ответы на вопрос 2
вынести счетчик за пределы цикла!

let q = 0;

for (question in questions) {
    ...
    ...
    for(...) {    // тут перечисление инпутов и лэйблов
        ...
        q++;
    }
}
Ответ написан
Комментировать
@hacker2001
Я бы использовал замыкания:

function getCounter(start=0) {
  return () => start++
}
undefined
let count=getCounter()
undefined
count()
0
count()
1
count()
2
count()
3
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы