Я предполагаю, что вы хотите сделать арифметику, но ваша функция на самом деле выполняет конкатенацию строк.Для арифметики вы должны убедиться, что любое «число» на самом деле является числом, а не строкой:
function register_click(num){
var box = document.getElementById('boxclicked');
box.value = box.value || 0
box.value = parseInt(box.value, 10) + num;
}
box.value
будет неопределенным при первом щелчке, поэтому мы должны убедиться, что оно имеет значение,даже если это значение 0
. parseInt преобразует строку в число, мы передаем 10
, чтобы убедиться, что она делает это в базе 10.
Иногда JavaScript забавен, например:
"1" + 2 + 3 === "123" // true
2 + 3 + "1" === "51" // true
Он всегда пытается принудить типы, иногда это хорошо, но это может привести к путанице, как описано выше, когда он работает нелогично.Это то, с чем вы столкнулись с вашим оригинальным кодом.Значением элемента была строка, в результате чего num
стал строкой и был объединен.