Вы бы выиграли от использования else if
, чтобы ваши логики c стали более компактными. Ваша неопределенная ошибка исходит от того, что вы используете переменную до ее создания. Я предполагаю, что вы хотели использовать totcaps
вместо этого. Я также упростил некоторые другие повторяющиеся вещи, которые вы делали.
Причина! Totcaps не работает так, как вы хотите (как описано в ответе Салмина), потому что отметка !
проверяет ""
, null
, undefined
, false
и цифры 0
и NaN
. Поскольку вы хотите проверить только на NaN
, сделайте это, но пропустите тройной ===
, чтобы избежать явной проверки типа.
/* Globals */
var nodoAdd;
var nodoCapsule;
var totcaps;
/* Mess info/err */
function writeMess(node, mess) {
newmess = document.createTextNode(mess);
node.replaceChild(newmess, node.firstChild);
}
/* Add caps */
function Add() {
try {
/* Default no message */
writeMess(nodoMess, "");
let capsule = Number(nodoCapsule.value);
let sign = capsule < 0 ? '' : '+';
/* Empty field */
if (capsule == "" || capsule == 0) {
writeMess(nodoMess, "Insert number of caps");
} else if (isNaN(capsule)) {
/* isNaN */
writeMess(nodoMess, "Insert valid");
} else if (totcaps == null) {
/* Create */
totcaps = capsule;
writeMess(nodoMess, "You insert: " + capsule + " caps");
} else {
/* Update if already exists */
totcaps += capsule;
writeMess(nodoMess, "You insert: " + totcaps + " caps. (" + sign + capsule + ")");
}
} catch (e) {
alert("Add " + e);
}
}
/* Core function */
function gestoreLoad() {
try {
/* Visits */
nodoAdd = document.getElementById("add");
nodoCapsule = document.getElementById("caps");
nodoMess = document.getElementById("messinfoerr");
/* Events */
nodoAdd.onclick = Add;
/* Empty text nodes */
nodoCapsule.value = "";
/* Empty message */
var TextNode = document.createTextNode("");
nodoMess.appendChild(TextNode);
} catch (e) {
alert("gestoreLoad " + e);
}
}
/* Load the code */
window.onload = gestoreLoad;
<!DOCTYPE html>
<html lang="it">
<head>
</head>
<body>
<h1>Dispenser</h1>
<p id="messinfoerr"></p>
<br />
<input type="text" id="caps" />
<input type="button" id="add" value="Add x caps"/>
<br />
<br />
</body>
</html>