Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Калькулятор стоимости доставки (https://javascript.ru/forum/dom-window/31154-kalkulyator-stoimosti-dostavki.html)

Katik 28.08.2012 17:39

Калькулятор стоимости доставки
 
Добрый день.
Помогите, пожалуйста, сдвинуться с места. Нужно сделать калькулятор стоимости доставки. Данные по городам и регионам, а также тарифы в зависимости от веса храняться в базе данных. Я сделала форму с выпадающим списком места назначения и полем для ввода веса.
Тарифы занесла в двумерный массив, где индексы - это зона и весовой диапазон.
При выборе пункта назначения определяю зону. При вводе веса определяю весовой диапазон. И тут ступор. Надо как-то обратиться к конкретному элементу массива с полученными посредством javascript индексами зоны и веса. Либо передать массив в js.

Рабочий код
Код:

<script type="text/javascript">

function Ves(objForm)
{
var massa = objForm.weight.value;
var diapazon;
if ((massa > 0) && (massa <2.99999)){diapazon = 'm0';}
else if ((massa > 2.99999) && (massa < 5.99999)) {diapazon = 'm3';}
else if ((massa > 5.99999) && (massa < 10.99999)) {diapazon = 'm6';}
else if ((massa > 10.99999) && (massa < 20.99999)) {diapazon = 'm11';}
else if ((massa > 20.99999) && (massa < 30.99999)) {diapazon = 'm21';}
else if (massa > 30.99999) {diapazon = 'm31';}

diap.innerHTML = diapazon;
}

function calc() {

var zona = document.getElementById("Locations");
var place=zona.options[zona.selectedIndex].value;

zone.innerHTML = place;
                }
</script>

</head>
<body>


<? $col=mysql_query("SELECT * FROM calc_zone");
$num_fields = mysql_num_fields($col);
while ($mas=mysql_fetch_array($col))
{
        for ($j=1; $j<$num_fields; $j++)
        {  $field_name = mysql_field_name($col,$j);
                $massa[$mas['id']][$field_name]=$mas[$field_name];
        }
}

?>

<form onsubmit="return false" id="PostcalcMainForm">
<table>
<tr><td>Куда: </td>
<td>
<select id="Locations" name="kuda" onchange="calc()" style="width:400">
<optgroup label="Города">
<?

$result=mysql_query("SELECT * FROM calc_city");
while ($row=mysql_fetch_array($result)){
        echo "<option value=\"".$row['zone']."\">".$row['name']."</option>\n";}
?>
</optgroup>
<optgroup label="Регионы">
<?
$res=mysql_query("SELECT * FROM calc_region");
while ($rows=mysql_fetch_array($res)){
                echo "<option value=\"".$rows['zone']."\">".$rows['name']."</option>\n";}
?>
</optgroup>
</select>        </td>
</tr>

<tr><td>Вес, кг: </td>
<td><input id="weight" type="text" size="5" value="1" onkeyup="Ves(this.form);"></td></tr>
</table>               
</form>
<div>Стоимость: <span id="result">0</span> руб.</div>       
<div>Зона: <span id="zone">0</span></div>
<div>Диапазон: <span id="diap">0</span></div>"


Slavenin 29.08.2012 19:02

вариантов три, либо передать массив в js, на мой взгляд не лучший вариант, либо организовать ajax запрос к серверу с конкретными параметрами считать в пхп и возвращать результат, ну или просто отсылать форму с уже готовыми значениями и опять же считать на php и формировать форму с готовыми данными, уже посчитанными

Katik 30.08.2012 15:32

Решила проще. Может, конечно, и варварски, зато все прекрасно считает. Занесла в скрытый селект тарифы (информация открытая), а индексы двумерного массива (зона и весовой диапазон) занесла в value в виде 0_m3 соответственно. С помощью нехитрых операций со строками и цикла перебираю все options и нахожу нужный элемент. Ну а там все просто считается.


Часовой пояс GMT +3, время: 07:23.