JavaScript умно (читай: это была плохая идея) перегрузил оператор +
для обозначения арифметического сложения и конкатенации строк.
Если один из операндов выглядит как строка,это сделает конкатенацию строк.Ваше значение выглядит как строка, поэтому оно делает это.
Я использовал parseInt(val, 10)
, чтобы попытаться получить целое число, или получил 0
, если мы вернем что-то вроде NaN
(не число),Второй аргумент parseInt()
- основа.Без этого число, введенное как 072
, будет читаться в восьмеричном (базовое 8) формате и, вероятно, не так, как вы хотите.Обновление
Событие правого щелчка, case 3
, не будет работать для меня с Chrome, поэтому я связал его с событием contextmenu
, и оно сработало ...
$('.item-selection-amount').click(function(event) {
var amount = parseInt($(this).val(), 10) || 0;
switch (event.which) {
case 1:
//set new value +
$(this).val(amount + 1);
break;
case 2:
//set new value reset
$(this).val(0);
break;
case 3:
//set new value -
if (amount > 0) {
$(this).val(amount - 1);
}
break;
}
}).bind('contextmenu', function(event) {
event.preventDefault();
var amount = parseInt($(this).val(), 10) || 0;
if (amount > 0) {
$(this).val(amount - 1);
}
})
jsFiddle .