Javascript - рассчитать значение элемента с идентификатором, как
Я не могу получить мои расчеты JavaScript для корзины.
Моя HTML-часть получила много других элементов ввода, кроме тех, которые имеют id "price-" и "qty-". Каким-то образом другой элемент ввода портит массив, я думаю. Образец:
<input type="hidden" id="price-1" value="10.50"/>
<input type="hidden" id="qty-1" value="1"/>
<input type="hidden" id="shipFee-1" value="4.00"/>
<input type="hidden" id="tax-1" value="0.70"/>
<input type="hidden" id="price-2" value="19.20"/>
<input type="hidden" id="qty-2" value="2"/>
<input type="hidden" id="shipFee-2" value="4.00"/>
<input type="hidden" id="tax-2" value="1.30"/>
Я хочу, чтобы он оповещал общее количество (цена * кол-во) как "48,9". Вот проблемная часть JavaScript:
var inputs=document.getElementsByTagName('input'),
total = 0,
price = new Array(),
qty = new Array();
for (var i = 0 ; i < inputs.length ; i++) {
if (inputs[i].id.indexOf('price-') == 0) {
price[i] = parseFloat(document.getElementById(inputs[i].id).value);
alert(price[i]); //alert result: 10.5 and 19.2
}
if (inputs[i].id.indexOf('qty-') == 0) {
qty[i] = parseInt(document.getElementById(inputs[i].id).value);
alert(qty[i]); //alert result: 1 and 2
}
}
alert(price.length); //alert result: 5
alert(qty.length); //alert result: 6
for (i = 0 ; i < price.length ; i++) {
total = total + price[i] * qty[i];
}
alert (total); //alert result: NaN
2 ответа
Не берите в голову, я нашел ответ через 10 минут после того, как я отправил этот вопрос. Теперь я чувствую себя идиотом ==;
Мне нужно использовать новую переменную для массива вместо "я", так как он используется для массива входных элементов.
var inputs=document.getElementsByTagName('input'),
total = 0,
price = new Array(),
qty = new Array(),
j = 0, k = 0;
for (var i = 0 ; i < inputs.length ; i++) {
if (inputs[i].id.indexOf('price-') == 0) {
price[j] = parseFloat(document.getElementById(inputs[i].id).value);
j++;
}
if (inputs[i].id.indexOf('qty-') == 0) {
qty[k] = parseInt(document.getElementById(inputs[i].id).value);
k++;
}
}
for (i = 0 ; i < price.length ; i++) {
total = total + price[i] * qty[i];
}
alert (total); //alert result: 48.9
Вы строите массив цен на основе счетчика цикла i. 10.50 входит в цену [0], количество 1, которое идет вместе с ним, помещается в qty[1], затем i проходит значения 2 и 3 без изменений в массивах. Затем, когда i=4, цена [4] получает 19,20, а затем qty[5] получает 2, затем в следующий раз.
Полученные массивы выглядят как
price[0] = 10.5, price[4] = 19.20
qty[1] = 1, qty[5] = 2
Когда вы в последний раз просматриваете математику, вы делаете это:
// i = 0
total = total + price[0] * qty [0] // price[0] = 10.50, but qty[0] = undefined, so total = Nan
// i = 1
total = total + price[1] * qty [1] // price[1] = undefined, qty[1] 1, so total = Nan
// etc.
Есть смысл?