LINUX.ORG.RU

Javascript. Помогите найти ошибку

 


0

2

Пытаюсь создать простенький тренажёр на заучивание японских иероглифов. Два типа заданий:

  1. Тебе показывают некое слово, нужно выбрать соответствующий ему иероглиф, нажав одну из девяти кнопок.
  2. То же самое, но иероглиф нужно ввести вручную (подразумевается, что юзверь будет работать со смартфона и использовать рукописный ввод).

При запуске программы всё вроде как работает, как и задумано, но через несколько циклов происходит странное: программа начинает полностью игнорировать один из типов заданий и выдаёт только что-то одно: либо 9 кнопок, либо ручной ввод. Хотя по задумке каждый раз тип задания должен определяться генератором случайного числа (0 или 1). И, повторюсь, первые несколько циклов всё в порядке.

Использование console.log показало следующее: когда вышеописанная проблема возникает, случайный выбор типа задания всё ещё срабатывает, как надо. Однако если рандом выбрал «неугодный» тип задания, то мгновенно функция update() (которая, в частности, запускает генератор случайных чисел и выбирает тип задания) запускается заново - до тех пор, пока рандом не выпадет на «правильное» задание.

Каждый раз в «опалу» попадает разный тип задания. Сейчас вдруг программа перестала предлагать нажать на одну из 9 кнопок, после обновления страницы и нескольких циклов - начинает предлагать ТОЛЬКО эти кнопки, забывая про второй тип задания.

С чем может быть связана ошибка?

Страница: https://mapper720.ru/kanji/kanji_js.html

Скрипт: https://mapper720.ru/kanji/kanji_js.js

Подсказка для тех, кто не разумеет иероглифов (чтоб знать, куда тыкать - это группа иероглифов, выбранная по умолчанию):

一 один

二 два

三 три

四 четыре

五 пять

六 шесть

七 семь

山 гора (читается как «яма»)

田 рисовое поле

中 середина, центр

口 рот, отверстие

私 я

東 восток

京 столица (новая)

都 столица (старая)

日 солнце, день

本 книга

父 отец

母 мать

見 смотреть, видеть



Последнее исправление: Mapper720 (всего исправлений: 1)

Попробуйте пошаговое выполнение программы через дебаггер, это удобнее console.log, там можно отслеживать значения каждой переменной да и вообще легче обнаружить строчку с которой всё идёт не так как задумывалось, чем расставлять наугад console.log-и. Судя по вашему описанию проблемы, функция update подстраивается под переменную отвечающую за тип задания, возможно ошибка кроется в условном переходе. Код не смотрел.

mydibyje ★★★
()
Ответ на: комментарий от mydibyje

пошаговое выполнение программы через дебаггер

Наверное, вопрос глупый, но… Как выполнить пошаговое выполнение? В отладчике Firefox/Chrome такой опции пока не нахожу.

Mapper720
() автор топика

Кодишь потому что копипастой и комментарии в сп.

function select_kanji_no_sets() {
    if (kanji_no_selector[0].selected) kono_kanji = [].concat(kanji_no_array_0);
    if (kanji_no_selector[1].selected) kono_kanji = [].concat(kanji_no_array_1);
    if (kanji_no_selector[2].selected) kono_kanji = [].concat(kanji_no_array_2);
    if (kanji_no_selector[3].selected) kono_kanji = [].concat(kanji_no_array_3);
    if (kanji_no_selector[4].selected) kono_kanji = [].concat(kanji_no_array_4);
    if (kanji_no_selector[5].selected) kono_kanji = [].concat(kanji_no_array_5);
    if (kanji_no_selector[6].selected) kono_kanji = [].concat(kanji_no_array_6);
    if (kanji_no_selector[7].selected) kono_kanji = [].concat(kanji_no_array_7);
    if (kanji_no_selector[8].selected) kono_kanji = [].concat(kanji_no_array_8);

}

// ТИП 0 - ВЫБОР ОДНОЙ ИЗ 9-и КНОПОК

crutch_master ★★★★★
()

нативный js код лучше структурировать в компоненты CustomElements, так например бинды событий можно засунуть в хуки connectedCallback и disconnectedCallback

Syncro ★★★★★
()