2014-10-17 5 views
0

Используя JQuery, я заполнил массив из значений флажка. Затем я создавал цикл для цикла через массив, анализировал значения флажка для целых чисел, суммировал их и присваивал значение переменной «total». Когда я запускаю это, я получаю не число, я подозреваю, что что-то происходит для цикла. Может кто-нибудь показать мне, что я делаю неправильно здесь. И, пожалуйста, простите меня, если мое кодирование не так чисто, как должно быть, я только начинаю в JS.parseInt по массиву и сумме

// create array and push selected checkbox values to it 
 
    var allVals = []; 
 

 
    $('input:checkbox[name=brand]:checked').each(function() { 
 
     allVals.push($(this).val()); 
 
     //allVals.map(number); 
 
    }); 
 
     
 
    for (var i=0; i < allVals.length; i++) { 
 
     var total 
 
     allVals[i] = parseInt(allVals[i]); 
 
     total += allVals[i] << 0; 
 
     alert(total); 
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

+0

Обратите внимание, что текущие ответы наполовину неправильно - вы действительно должны инициализировать 'total' нулю (иначе' неопределенными + number' будет 'NaN'), но вы * не * должны переместить эту переменную за пределы цикла, потому что * Javascript не имеет области цикла *. –

ответ

-2

первый всего вам нужно создать общую переменную за пределами цикла for , затем инициализировать ее до нуля

var total = 0; 

for (var i=0; i < allVals.length; i++) { 

    allVals[i] = parseInt(allVals[i],10); 
    total += allVals[i]; 
    console.log(total); 
} 

Второй Поскольку вы добавляете номер в неинициализированного переменной вы получаете NaN результат

, например

var c; 
c +=1; //this will be NaN(not a numeric number) 

причина в том, что при инициализации переменной JavaScript знает правильный тип данных
, который должен быть присвоен этой переменной

+0

Это сработало! Спасибо огромное! Я несколько часов вытягиваю волосы, пытаясь заставить это работать. Я ценю это! – exeleon

+0

Одна рекомендация - всегда устанавливать радиан в 10 при использовании parseInt или вы можете получить восьмеричные числа – leopic

+0

Хорошее уведомление, но если вы не укажете базу, базой по умолчанию является базовая 10, так что parseInt ('20 ') <=> ParseInt ('20', 10) – Ismail

1

Вы объявляя total внутри for поэтому он получает сбрасываются каждый раз - я изменил код немного, но это должно работать:

var numbers = $('input:checkbox[name=brand]:checked').map(function() { 
    return isNaN(this.value) ? 0 : this.value; 
}).get(); 

var total = 0; 

for (var i = 0; i < numbers.length; i++) { 
    total += numbers[i]; 
} 

alert(total); 
+0

@ArindamNayak - И если 'isNan' возвращает' true' - тогда 'map' возвращает' 0' .... – tymeJV

0

Может быть так же просто, как:

$('[type=checkbox]').on('click', sum); 
 
    
 
function sum(e) { 
 
    var total = $('[type=checkbox]:checked') 
 
       .toArray() 
 
       .reduce(function (a,b) {return a + +b.value;}, 0); 
 
    $('[data-sum]').attr('data-sum', total.toFixed(2)); 
 
}
[data-sum] { 
 
    border-top: 1px solid #c0c0c0; 
 
    width: 100px 
 
} 
 

 
[data-sum]:before { 
 
    content: '\03A3 'attr(data-sum); 
 
    padding-left: 4px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="checkbox" value="23.23"> 23.23<br> 
 
<input type="checkbox" value="3.33"> 3.33<br> 
 
<input type="checkbox" value="15.00"> 15.00<br> 
 
<input type="checkbox" value="1101.22"> 1101.22<br> 
 
<input type="checkbox" value="78.10"> 78.10<br> 
 
<input type="checkbox" value="122.05"> 122.05<br> 
 
<input type="checkbox" value="435.00"> 435.00<br> 
 
<div data-sum="0"></div>

Смежные вопросы