Я новичок в javascript и пытался провести рефакторинг некоторого кода, очевидно, что в javascript мне чего-то не хватает, и я хотел бы изучить его. Этот код выдает значение, если во всех 5 списках есть что-то выбранное:
function GetTotal() {
//_listSeverity = document.getElementById("_listSeverity");
function ParseListBoxvalue(listBox) {
return parseInt(GetListBoxValue(listBox),10);
}
_listSeverity = document.getElementById("<%= _listSeverity.ID %>");
_listAssociate = document.getElementById("<%= _listAssociateImpact.ID %>");
_listCustomerImpact = document.getElementById("<%= _listCustomerImpact.ID %>");
_listRegulatoryImpact = document.getElementById("<%= _listRegulatoryImpact.ID %>");
_listShareholderImpact = document.getElementById("<%= _listShareholderImpact.ID %>");
_calculatedTotal = (ParseListBoxvalue(_listAssociate) +
ParseListBoxvalue(_listSeverity) + ParseListBoxvalue(_listCustomerImpact)
+ParseListBoxvalue(_listRegulatoryImpact) + ParseListBoxvalue(_listShareholderImpact)
)/ 5;
if (isNaN(_calculatedTotal))
document.getElementById("_total").innerHTML = "Not enough information";
else
document.getElementById("_total").innerHTML = _calculatedTotal;
}
Затем я попытался выполнить рефакторинг в цикл for, чтобы исключить дублирование кода.
Я перепробовал много методов if(typeof _calculatedValue !='undefined')
, которые я обнаружил в Google, чтобы понять, может ли это решить эту проблему. Насколько я понимаю, я не сталкиваюсь с проблемой области действия, поскольку единственные реальные области действия ограничены объявлениями function(){}
.
Это никогда не производит ценность. Я понимаю, что / 5
еще не в нем, но это не кажется мне причиной для того, чтобы всегда производить NaN
.
function GetTotal() {
//_listSeverity = document.getElementById("_listSeverity");
function ParseListBoxvalue(listBox) {
return parseInt(GetListBoxValue(listBox),10);
}
var _ListIds=new Array("<%= _listSeverity.ID %>","<%= _listAssociateImpact.ID %>",
"<%= _listCustomerImpact.ID %>", "<%= _listRegulatoryImpact.ID %>",
"<%= _listShareholderImpact.ID %>");
// _calculatedTotal = (ParseListBoxvalue(_listAssociate) +
// ParseListBoxvalue(_listSeverity) + ParseListBoxvalue(_listCustomerImpact)
// +ParseListBoxvalue(_listRegulatoryImpact) + ParseListBoxvalue(_listShareholderImpact)
// )/ 5;
for (i = 0; i < _ListIds.length; i++) {
if (i==0)
_calculatedTotal = ParseListBoxvalue(_ListIds[i]);
else
_calculatedTotal += ParseListBoxvalue(_ListIds[i]);
}
if (isNaN(_calculatedTotal))
document.getElementById("_total").innerHTML = "Not enough information";
else
document.getElementById("_total").innerHTML = _calculatedTotal;
}
Другая функция не должна иметь никакого отношения, но вот она:
function GetListBoxValue(listBox) {
index = listBox.selectedIndex
try {
opt = listBox.options[index]
return opt.value;
} catch (e) { return null; }
}
Что не так с этим для цикла? или это что-то кроме цикла for, которое приводит к тому, что рефакторинг не дает значения?