Я получаю ошибку Uncaught ReferenceError для переменной, которую я назначаю в функции, которая запускается при событии onblur. Говорит, что переменная не определена, если она четко определена в функции.

Сообщение об ошибке:

Неперехваченная ошибка ссылки:

labSectionsByGraduate is not defined
    at calculateGTALabCost (AvailableFundsCosts.aspx:218)
    at doCalculations (AvailableFundsCosts.aspx:269)
    at HTMLInputElement.onblur (AvailableFundsCosts.aspx:685)

Я попытался добавить alert(labSectionsByGraduate), чтобы проверить, что происходит сразу после третьей переменной (GTASemesterStipend), и это работает, когда я использую alert(GTALabCost), для предупреждения ничего не происходит. Полагаю, это как-то связано с моими условиями if.

function calculateGTALabCost()
        {
            var labSectionsbyGraduate = parseFloat(document.getElementById("cphMain_gridPTA_iTxtAmount_0").value);
            var GTAlab = parseFloat(document.getElementById("cphMain_gridTLS_iTxtAmount_1").value);
            var GTASemesterStipend = parseFloat(document.getElementById("cphMain_gridTLS_iTxtAmount_5").value);

            if(isNaN(labSectionsbyGraduate))
            {labSectionsbyGraduate = 0.00;}
            if(isNaN(GTAlab))
            {GTAlab = 0.00;}
            if(isNaN(GTASemesterStipend))
            {GTASemesterStipend = 0.00;}

            var GTALabCost = parseFloat((labSectionsByGraduate / GTAlab) * GTASemesterStipend);

            alert(GTALabCost);

            var cell = document.getElementById("cphMain_gridPC").rows[2].cells;

            cell[1].innerHTML = GTALabCost.toLocaleString('en-US', { style: 'currency', currency: 'USD' });

        }

Я ожидаю, что результат изменит ячейку моей таблицы / сетки в соответствии с расчетом, который я пытаюсь сделать.

-1
Juan 29 Окт 2019 в 18:13
2
Именно что за сообщение об ошибке? (Все сообщение)
 – 
Pointy
29 Окт 2019 в 18:16
3
Также обратите внимание, что если GTAlab инициализировано нулем, эта операция деления даст Infinity.
 – 
Pointy
29 Окт 2019 в 18:18
Может ли это быть значение parseFloat...?
 – 
Dwza
29 Окт 2019 в 18:18
Нет причин использовать parseFloat() в результатах выражения, включающего числа; это уже поплавок.
 – 
Pointy
29 Окт 2019 в 18:20
4
У вас просто опечатка: labSectionsbyGraduate не совпадает с labSectionsByGraduate...
 – 
Mischa
29 Окт 2019 в 18:20

1 ответ

Лучший ответ

В вашей строке var GTALabCost = parseFloat((labSectionsByGraduate / GTAlab) * GTASemesterStipend); используется labSectionsByGraduate, но вы определяете labSectionsbyGraduate. Просто верблюжья ошибка. Ваше здоровье!

2
Cakasim 29 Окт 2019 в 18:21