Консультация № 178410
15.05.2010, 15:30
43.65 руб.
0 1 1
Здравствуйте, уважаемые эксперты!

Имеется ява скрипт, рассчитывающий итоговую стоимость, исходя из начальной цены, величины надбавки (которая суммируется с ценой) и количества. Можно обойтись и без суммирования надбавки с ценой, убрав надбавку и назначив каждому подтипу свою цену.
Можно ли цену для каждого подтипа хранить в тексте скрипта?
Для типа1 существует несколько подтипов, каждому из них назначена своя цена, и именно она участвует в расчетах.
Для типа2 существует также несколько подтипов и также необходимо хранить цену для каждого подтипа в скрипте.

Приложение:
<form name="form" action="sendmail.php" method="post">
<table border="1">

<tr>
<td>Товар 1</td>
<td>
<select class=select onchange="calc(this.id);" id="T1">
<option value="0" disabled selected="selected">Выберите тип</option>
<option value="3000">Тип1</option>
<option value="3100">Тип2</option>
<option value="3200">Тип3</option>
<option value="3300">Тип4</option>
</select>
</td>
<td><select onchange="calc(this.id);" id="addT1">
<option value="0" disabled selected="selected">Подтип</option>
<option value="500">Подтип1 типа1</option>
<option value="600">Подтип2 типа1</option>
<option value="700">Подтип3 типа1</option>
</select></td>
<td>
Цена: <span id='pT1'>???</span> руб.
</td>
<td>
<input class="fild" name="cn1T1" type="text" id="cn1T1" value="0" size="2" maxlength="2" onKeyUp="calc(this.id)" />

</td>
<td>= <span id='tT1'>???</span> руб.</td>
</tr>
<tr>
<td></td><td></td><td></td><td></td>
<td align="center"><b>Итого:<input type="hidden" name="totpr" value="" id="totpr" /></b></td>
<td align="center" id="totalprice" style="color: #993300;font-weight:bold; font-size:14px">0</td>

</tr>
</table>

</form>

<script type="text/javascript">
var subtotals = [];
function calc (tovar) {
tovar = tovar.match(/\d+$/); // извлекаем из id номер товара (номер строки)
var selectedPriceClass = document.getElementById('T'+tovar); // селект с типами
var selectedAddon = document.getElementById('addT'+tovar); // селект с надбавками
var price = parseInt(selectedPriceClass.options[selectedPriceClass.selectedIndex].value); // цена
var addon = parseInt(selectedAddon.options[selectedAddon.selectedIndex].value); // надбавка
var qty = parseInt(document.getElementById('cn1T'+tovar).value) || 0; // количество
subtotals[tovar] = qty * ( price + addon );
document.getElementById('pT' + tovar).innerHTML = ( price + addon ); // вывод скорректированной цены
document.getElementById('tT'+tovar).innerHTML = subtotals[tovar]; // выводим в страницу промежуточный итог
total = 0;
for (subtotal in subtotals) { // суммируем массив промежуточных итогов
total += subtotals[subtotal];
};
document.getElementById('totalprice').innerHTML = total ; <!--выводим в страницу общий итог-->
document.getElementById('totpr').value = total ; <!--выводим в скрытое поле-->
}
</script>

Обсуждение

Неизвестный
15.05.2010, 15:59
общий
это ответ
Здравствуйте, Finrod!
Конечно, можно - для этого очеть удобно использовать массивы, объявленные глобально в документе. (примером такого массива служит массив subtotals в приведенном Вами примере.
Объявить нужный Вам массив можно несколькими способами, например:

<script type="text/javascript">
var subtypes1 = [];
subtypes1[0] = 3000;
subtypes1[1] = 3100;
subtypes1[2] = 3200;
</script>

или

<script type="text/javascript">
var subtypes1 = [3000, 3100, 3200];
</script>

Обратите внимание, что автоматическая нумерация массива начинается с нуля.
в обоих случаях к элементу массива можно обратиться через его индекс, например:


<script type="text/javascript">
var subtypes1 = [3000, 3100, 3200];

get_price(2); // вызываем функцию, выводящую 2-й элемент массива subtypes1

function get_price (n) { // функция принимает индекс элемента массива subtypes1 и выводит элемент массива с этим индексом
alert ('цена ' + n +'-ого товара = ' + subtypes1[n] + 'рублей');
}

</script>
5
Форма ответа