jQuery + Coldfusion: Uncaught TypeError: Невозможно прочитать свойство '3' из неопределенного - PullRequest
0 голосов
/ 21 января 2019

Я использую Coldfusion (8) и JS (не уверен насчет версии).

У меня проблема с одним выпадающим списком. В поле «Уровень чтения» должно быть указано «название книги». Но я получаю упомянутое сообщение об ошибке на консоли браузера, и раскрывающийся список ничего не заполняет (я проверил БД, книги для выбранного уровня присутствуют).

Проблема с перебоями. Иногда список книг загружается, а иногда нет.

Console Error

Book Drop-Down

Вот мои две функции JS:

function select_level() {
    for (i = 0; i < document.assess_form.dralevel.length; i++) {
        if (document.assess_form.dralevel[i].selected) {
            dralevel = document.assess_form.dralevel[i].value;
        }
    }

    if (dralevel != document.assess_form.curr_dralevel.value) {
        document.assess_form.curr_dralevel.value = dralevel;

        if (is_dra) {
            if (dralevel < 14) {
                document.getElementById('time_off').style.display = 'block';
                document.getElementById('time_on').style.display = 'none';
            } else {
                document.getElementById('time_on').style.display = 'block';
                document.getElementById('time_off').style.display = 'none';
            }

            reset_book();
        }
    }
}

function reset_book() {
    clear_sel(document.assess_form.book_id);

    if (document.assess_form.curr_dralevel.value == -1) {
        new_option = document.createElement('option');
        new_option.value = '0';
        new_option.text = 'First select a Reading Level';
        document.assess_form.book_id.options.add(new_option);
        document.assess_form.book_id.selectedIndex = 0;
    } else {
        book_ary = books[document.assess_form.curr_versionid.value][document.assess_form.curr_dralevel.value].split('^');

        new_option = document.createElement('option');
        new_option.value = '0';
        new_option.text = 'Select a book...';
        document.assess_form.book_id.options.add(new_option);
        document.assess_form.book_id.selectedIndex = 0;

        for (i = 0; i < book_ary.length; i++) {
            title_ary = book_ary[i].split('|');
            new_option = document.createElement('option');
            new_option.value = title_ary[1];
            new_option.text = title_ary[0];
            document.assess_form.book_id.options.add(new_option);
        }
    }

    document.assess_form.miscues.value = '';
    document.assess_form.minutes.selectedIndex = 0;
    document.assess_form.seconds.selectedIndex = 0;

    document.assess_form.curr_book_id.value = 0;
}

Console.log(books) - когда работает:

console.log(error)

Console.log(books) - когда он не работает:

enter image description here

1 Ответ

0 голосов
/ 24 января 2019

Из вашей картинки видно, что объект books пуст, когда возникает эта ошибка. Вероятно, это реальная проблема, которую вам нужно решить. Вы не предоставили никакого кода, который устанавливает значение books, поэтому мы не сможем сказать, почему это происходит.

Сначала вы захватываете books[document.assess_form.curr_versionid.value], а затем пытаетесь захватить свойство document.assess_form.curr_dralevel.value того, что возвращается.

Он вернет undefined, потому что books не имеет никакого свойства, не говоря уже о document.assess_form.curr_versionid.value.

оскорбительная строка кода, как вы указали:

book_ary = books[document.assess_form.curr_versionid.value][document.assess_form.curr_dralevel.value].split('^');

Воспроизводимые

var books = { "Book1": "Book1Data", "Book2": "Book2Data"  };

// this line will generate an error because the output of books[1] is undefined
// thus, you can't call the [2] property on it
var book_ary = books[1][2]; // Cannot read property '2' of undefined

Это происходит потому, что вы не можете получить доступ к свойству чего-то, что undefined, таким образом, в JavaScript. Вывод books[1] равен undefined, поэтому вызов books[1][2] приведет к ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...