Проблема связана с тем, что вы проверяете длину массива, а затем пытаетесь использовать элемент этого массива, который не существует.Возможно, вы также пытаетесь установить атрибут для несуществующего элемента.
Возможно, это реальная причина проблемы:
if (x >= simon.array.length) {
clearTimeout(timer);
show(x);
allowPress();
Простое удаление show(x)
должно помочьПричина в том, что вы проверяете длину simon.array
, затем в function show(x)
вы делаете запрос на simon.array[x]
, но ничего не найдете, так как x
больше длины этого массива.
Другая возможная проблема заключается в следующем фрагменте, но может быть решена несколькими способами.Один из способов - проверить x
перед прохождением.Другой способ убедиться, что элемент (display
) не является null
перед установкой атрибута.
// adds then removes flash class to light pads.
function show(x){
var display = document.getElementById("light" + simon.array[x]);
display.setAttribute("class", "flasher");
setTimeout(function(){
display.setAttribute("class", "game-box");
},500);
}
Мое предложение будет следующим:
// adds then removes flash class to light pads.
function show(x){
var display = document.getElementById("light" + simon.array[x]);
if (display) {
display.setAttribute("class", "flasher");
setTimeout(function(){
display.setAttribute("class", "game-box");
},500);
}
}
Возможно, вы захотитепроверьте classList
, а также альтернативу setAttribute
.
Что еще нужно рассмотреть вместо использования setTimeout
, это использовать CSS-анимацию .