Я начинаю с одного элемента в стеке ar
.Переменная не получает повторную инициализацию при повторном вызове функции
Я хотел бы использовать код: Если пользователь нажимает на правильную ссылку (один случайный выбор компьютера), переходим к следующему «уровню», где добавляем еще один элемент в стек.
На следующем уровне пользователь должен выбрать 2 правильные ссылки в том порядке, в котором они находятся в стеке. Как только пользователь это сделает, он должен перейти на следующий уровень и так далее. Это похоже на игру Саймона, и я просто пытаюсь подражать голой логике игры с этим.
HTML:
<a href="javascript:void(0);" id="l1">Link 1</a>
<a href="javascript:void(0);" id="l2">Link 2</a>
<a href="javascript:void(0);" id="l3">Link 3</a>
<a href="javascript:void(0);" id="l4">Link 4</a>
<div id="log"></div>
Javascript
function check() {
var index = 0;
$('body').click(function(event) {
var log = $('#log');
alert(index);
if ($(event.target).is(ar[index])) {
log.html(index + ' ' + event.target.id + ' was clicked.');
index++;
if (index === ar.length) {
//if all clicked elements corresponded to correct
//order in array and reached end of array
level +=1;
console.log("Passing to next level. ", level);
randomId();
console.log(ar);
log.html(ar);
check();
}
}
else {
log.html(index + ' ' + event.target.id + ' was clicked. Is wrong');
index = 0;
}
});
}
var ar = [];
divIds = ["#l1", "#l2", "#l3", "#l4"];
level = 1;
randomId();
check();
function randomId() {
var min = 0;
var max = 3;
var id = Math.floor(Math.random() * (max-min+1)) + min;
var selectedId = divIds[id];
ar.push(selectedId);
alert(ar);
}
Однако, когда я звоню check()
функцию второй раз (когда мы переходим на уровень 2, где есть 2 элемента в стеке) значение индекса не является 0, несмотря на то, что var index = 0
является первой строкой функции check().
Я использую console.log и предупреждаю, чтобы зафиксировать значение индекса, но их простое число меня сбивает с толку. И, посмотрев на количество всплывающих окон, моя функция проверки работает как петля. Почему мы не получаем чистый список, когда мы вызываем функцию второй раз?
Каждый раз, когда вы звоните' чек() 'вы добавляете ** дополнительный * * обработчик события '
'. Обработчики из предыдущего вызова 'check()' не волшебным образом исчезают. То есть после двойного вызова 'check()', нажатие '' выполнит два обработчика событий. Если это проблема, удалите существующие обработчики событий, прежде чем связывать новую. –Зачем прикреплять обработчик кликов снова и снова? – LGSon