Прошу помощи, задача сложить все что в value c классом num. Проблемы возникают если в value попадает '-' или 'пусто' вместо числа, тогда sum принимает пустое значение. Как сделать преобразование, чтобы если в value некорректный символ попадает или отрицательное число, то они преобразовывались в ноль?
<table>
<tr>
<td>
<input type='text' class='num' name='num1' value='2'>
</td>
<td>
<input type='text' class='num' name='num1' value='3'>
</td>
<td>
<input type='text' class='num' name='num1' value='-'>
</td>
</tr>
var sum = 0;
$('.num').each(function(){
sum += parseInt($(this).val());
});
console.log(sum);
$('.num').each(function(){
var value = parseInt($(this).val());
if (!isNaN($(this).val()) && value > 0)
sum += value;
});
Можно воспользоваться логической операцией ИЛИ. Которая возвращает первый операнд, которые приводится к true.
в данном случае, в результате вызова parseInt, при неудаче будет возвращено NaN, которое проводится к false.
Следовательно можно воспользоваться следующей записью:
var sum = 0;
$('.num').each(function(){
sum += parseInt($(this).val()) || 0; // если не число - прибавляем 0
});
console.log(sum);
Пример:
var sum = 0;
$('.num').each(function() {
sum += parseInt($(this).val()) || 0;
});
console.log(sum);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tr>
<td>
<input type='text' class='num' name='num1' value='2'>
</td>
<td>
<input type='text' class='num' name='num1' value='3'>
</td>
<td>
<input type='text' class='num' name='num1' value='-'>
</td>
</tr>
Разбить на две операции
// побитовое "или" вернет цифру если она есть, в любом другом случае ноль
var a = $this.val() | 0;
// Проверка на отрицательное значение
sum += a < 1 ? 0 : a;
Сборка персонального компьютера от Artline: умный выбор для современных пользователей