|
пересчет суммы в заказе в зависимости от выбраных чекбоксов
Добрый день, форумчане, интересует такой вопрос: мне нужно автоматически пересчитывать товары в заказе в зависимости от введенного значения количества и нажатого чекбокса.
У меня пока сделан только подсчет в зависимости от измененного количества, вот скрипт(источник):
function calculate(quantity, price, updItemId){
var anum = /(^\d+$)|(^\d+\.\d+$)/;
if (!anum.test(quantity)) {
alert('Введенное значение не является числом!');
return;
}
// сумма = количество * цену
goodSum = quantity * price;
document.getElementById(updItemId).innerHTML = goodSum;
var meForm = document.getElementById('me_order_form');
var bdoArray = meForm.getElementsByTagName('bdo');
// устанавливаем начальное нулевое значение ОБЩЕЙ суммы
var allSumm = 0;
// и в цикле прибавляем к ней сумму каждого товара
for (j = 0; j < bdoArray.length; j++) {
allSumm = allSumm + parseFloat(bdoArray[j].innerHTML);
}
document.getElementById('total_sum').innerHTML = allSumm;
}
а это разметка формы
<form id='me_order_form'>
<table class="variants">
<tr>
<th class="col1"><input type="checkbox"></th>
<th class="col2">Размеры и комплекты</th>
<th class="col3">Количество</th>
<th class="col4">Стоимость, руб.</th>
</tr>
<tr>
<td class="col1"><input type="checkbox" id="r1" onchange="sums()"></td>
<td class="col2">товар 1</td>
<td class="col3"><div class="count"><input type='text' value='0' id='inp_1' onBlur='calculate(this.value, "5000", "bdo_1")'></div></td>
<td class="col4"><bdo dir='ltr' id='bdo_1'>5000</bdo></td>
</tr>
<tr>
<td class="col1"><input type="checkbox" id="r2" onchange="sums()"></td>
<td class="col2">товар 2</td>
<td class="col3"><div class="count"><input type='text' value='0' id='inp_2' onBlur='calculate(this.value, "7000", "bdo_2")'></div></td>
<td class="col4"><bdo dir='ltr' id='bdo_2'>7000</bdo></td>
</tr>
<tr>
<td class="col1"><input type="checkbox" id="r3" onchange="sums()"></td>
<td class="col2">товар 3</td>
<td class="col3"><div class="count"><input type='text' value='0' id='inp_3' onBlur='calculate(this.value, "300", "bdo_3")'></div></td>
<td class="col4"><bdo dir='ltr' id='bdo_3'>300</bdo></td>
</tr>
<tr class="bottom">
<td colspan="2" class="total">Общая сумма заказа: <span class="price" id='total_sum'>0</span> <span class="price">Р</span></td>
<td colspan="2" class="order"><a href="#"></a></td>
</tr>
</table>
</form>
вопрос: как правильно написать, чтобы пересчет был только для строк, у которых активен чекбокс? Я писал в цикле , где сумма подсчитывается
for (j = 0; j < bdoArray.length; j++) {
var elem=document.getElementById("r"+i);
if(elem.checked)
allSumm = allSumm + parseFloat(bdoArray[j].innerHTML);
}
но так не считает общую сумму. Помогите, пожалуйста! |
georg, типа набросок...
<!DOCTYPE html>
<html>
<head>
<!--
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
</style>
<script type="text/javascript">
function calculate(Obj, price){
var o=Obj.parentNode.parentNode.parentNode;
var anum = /(^\d+$)|(^\d+\.\d+$)/;
var quantity=Obj.value;
if (!anum.test(quantity)) {
alert('Введенное значение не является числом!');
return;
}
// сумма = количество * цену
goodSum = quantity * price;
o.getElementsByTagName('bdo')[0].innerHTML = goodSum;
sums();
};
function sums(Obj) {
var meForm = document.getElementById('me_order_form');
if (!Obj.checked) {
meForm.getElementsByTagName('input')[0].checked=false;
}
var bdoArray = meForm.getElementsByTagName('bdo');
// устанавливаем начальное нулевое значение ОБЩЕЙ суммы
var allSumm = 0;
// и в цикле прибавляем к ней сумму каждого товара
for (j = 0; j < bdoArray.length; j++) {
var o=bdoArray[j].parentNode.parentNode;
if (o.getElementsByTagName('input')[0].checked) {
allSumm = allSumm + parseFloat(bdoArray[j].innerHTML);
}
}
document.getElementById('total_sum').innerHTML = allSumm;
};
function allSumm(Obj) {
var meForm = document.getElementById('me_order_form');
var o = meForm.getElementsByTagName('input');
var i;
for (i = 0; i < o.length; i++) {
if (o[i].type=='checkbox') {
o[i].checked=Obj.checked;
}
}
sums(Obj);
}
</script>
</head>
<body>
<form id='me_order_form'>
<table class="variants">
<tr>
<th class="col1"><input type="checkbox" onclick='allSumm(this)'></th>
<th class="col2">Размеры и комплекты</th>
<th class="col3">Количество</th>
<th class="col4">Стоимость, руб.</th>
</tr>
<tr>
<td class="col1"><input type="checkbox" class='item' id="r1" onclick="sums(this)"></td>
<td class="col2">товар 1</td>
<td class="col3">
<div class="count">
<input type='text' value='0' id='inp_1' onBlur='calculate(this, 5000)'>
</div>
</td>
<td class="col4">
<bdo dir='ltr' id='bdo_1'></bdo>
</td>
</tr>
<tr>
<td class="col1"><input type="checkbox" class='item' id="r2" onclick="sums(this)"></td>
<td class="col2">товар 2</td>
<td class="col3"><div class="count"><input type='text' value='0' id='inp_2' onBlur='calculate(this, 7000)'></div></td>
<td class="col4"><bdo dir='ltr' id='bdo_2'></bdo></td>
</tr>
<tr>
<td class="col1"><input type="checkbox" class='item' id="r3" onclick="sums(this)"></td>
<td class="col2">товар 3</td>
<td class="col3"><div class="count"><input type='text' value='0' id='inp_3' onBlur='calculate(this, 300)'></div></td>
<td class="col4"><bdo dir='ltr' id='bdo_3'></bdo></td>
</tr>
<tr class="bottom">
<td colspan="2" class="total">Общая сумма заказа: <span class="price" id='total_sum'>0</span> <span class="price">Р</span></td>
<td colspan="2" class="order"><a href="#"></a></td>
</tr>
</table>
</form>
</body>
</html>
|
<table id="myTable">
<tr>
<th><input type="checkbox">
<th><input>
</tr>
<tr>
<th><input type="checkbox">
<th><input>
</tr>
</table>
<button id="myButton">sum = 0</button>
<script>
window.onload = function () {
var myTable = document.getElementById('myTable');
var myButton = document.getElementById('myButton');
var rows = myTable.rows;
var len = rows.length;
var checkbox;
var inp;
var sum;
myButton.onclick = function () {
sum = 0;
for (var i = 0; i < len; i++) {
checkbox = rows[i].children[0].children[0];
inp = rows[i].children[1].children[0];
if (checkbox.checked == true && isNaN(parseFloat(inp.value)) != true) {
sum += parseFloat(inp.value);
}
}
myButton.innerHTML = 'sum = ' + sum;
}
}
</script>
|
ребята, огромное спасибо, все получилось)
ksa, если я оберну поле для ввода значения еще в один div (хочу справа и слева поставить ссылки "вперед"-"назад"), вот так:
<tr>
<td class="col1"><input type="checkbox" class='item' id="r3" onclick="sums(this)"></td>
<td class="col2">товар 3</td>
<td class="col3">
<div>
<a class="left" href="#"></a>
<div class="count"><input type='text' value='0' id='inp_3' onBlur='calculate(this, 300)'></div>
<a class="right" href="#"></a>
</div>
</td>
<td class="col4"><bdo dir='ltr' id='bdo_3'></bdo></td>
</tr>
то тогда не считает. требуется прописать дополнительный ParentNode для input? я попробовал, не сработало |
Цитата:
Цитата:
Цитата:
|
да, я знаю, что с маленькой буквы, спасибо. Еще раз спасибо, с вашей помощью все получилось.
|
ой классная штука. только я убрал эти чекбоксы. мне нужно просто 1 ячейка в которую вводишь кол и она пересчитывает цену.
подскажите следующее. как сделать. у меня есть $price1 $price2 $price3 к каждой цене привязано свое количество. типо если покупать товар до к примеру 10 шт это цена 1.(розница) если от 10 то цена 2(мелкий опт) и если к примеру от 50 то покупаешь по цене 3(крупный опт) вот как сделать что бы при пересчете оно это учитывало. ?) помогите плз. в явяскрипте не шарю абсолютно) |
ExXxTaSy,
<html>
<head>
<title></title>
<script>
var price1 = 10, price2 = 20, price3 = 30;
function conversion(val) {
var div = document.getElementById("div"), price = document.getElementById("price");
if (isNaN(val)) { div.innerHTML = ""; price.innerHTML = ""; }
else {
switch (true) {
case (val <= 0): {
div.innerHTML = "";
price.innerHTML = ""; break;
}
case (val < 10): {
div.innerHTML = val*price1;
price.innerHTML = price1; break;
}
case (val >= 10 && val < 50): {
div.innerHTML = val*price2;
price.innerHTML = price2; break;
}
case (val > 50): {
div.innerHTML = val*price3;
price.innerHTML = price3; break;
}
}
}
}
</script>
</head>
<body>
<input type="text" onBlur="conversion(this.value)" onChange="conversion(this.value)" onkeypress="conversion(this.value)" onkeyup="conversion(this.value)" value="1" id="txt">
<div id="div"></div><div id="price"></div>
<script>window.onload = conversion(document.getElementById("txt").value);</script>
</body>
</html>
|
Цитата:
|
ExXxTaSy, поправил предыдущий пост
|
| Часовой пояс GMT +3, время: 19:52. |
|