|
|
|
| Помогите, плиз, я совсем запутался!
Задача такая: есть два поля select, и надо на их основании посчитать цену позиции.
В первом поле выбирается ширина изображения, в value находится автоматически вычисленная php-скриптом высота. Она выводится в span с id="ddX", где X - порядковый номер позиции.
Во втором поле select происходит выбор носителя, при этом value является ценой.
При изменении состояния любого поля select требуется, чтобы в span с id="ppX" записывалось значение, равное ширине помноженной на длину и на цену, а в span id=result - сумма стоимости всех позиций, то есть, содержимое span id=[pp0..ppN], где N - количество позиций.
Для наглядности, ссылка: http://mumm-36.narod.ru/test.html
<table id=order border=1>
<tr>
<td>Ш:
<select size=1 name='hsize' onchange='k = this.value; document.getElementById("dd0").innerHTML = k;'>
<option value=99>120</option>
<option value=149>180</option>
</select> В:
<span id='dd0'>99</span> мм
</td>
<td>
<select size='1' name=mat onchange='var p = this.value; document.getElementById("pp0").innerHTML = p*k;'>
<option value='200'>Фотобумага</option>
<option value='500'>Холст</option>
</select>
</td>
<td>
<span id=pp0>109.5</span> руб.
</td>
</tr>
<tr>
<td >Ш:
<select size=1 name='hsize' onchange='k = this.value; document.getElementById("dd1").innerHTML = k;'>
<option value=62>120</option>
<option value=92>180</option>
</select> В:
<span id='dd1'>62</span> мм
</td>
<td>
<select size='1' name=mat onchange='var p = this.value; document.getElementById("pp1").innerHTML = p*k;'>
<option value='200'>Фотобумага</option>
<option value='500'>Холст</option>
</select>
</td>
<td>
<span id=pp1>91</span> руб.
</td>
</tr>
</table>
|
Завис я, в общем... | |
|
|
|
|
|
|
|
для: DJ Paltus
(16.07.2010 в 12:34)
| | Чтобы не допускать ошибок и повторений кода, создайте функцию, которая будет вызываться при изменении любого селекта.
Я подробно не вникал в Ваши расчёты, поэтому приведу пример, от которого Вы можете отталкиваться:
function count() {
var width = document.getElementById('select1').value;
var heigth = document.getElementById('select2').value;
var square = width * heigth ;
}
...
<select id='select1' onchange='count();' ... >
<select id='select2' onchange='count();' ... >
<select id='select3' onchange='count();' ... >
|
| |
|
|
|
|
|
|
|
для: bishake
(16.07.2010 в 12:50)
| | Хм. Да, понемногу начало получаться, спасибо. НО!
Остается невыясненным такая деталь - как из этой конструкции:
<select size=1 id='hsize0' >
<option value=99>120</option>
<option value=149>180</option>
</select>
|
вытащить и передать в переменную текст (цифру 120 или 180 в данном случае) выделенного элемента? | |
|
|
|
|
|
|
|
для: DJ Paltus
(16.07.2010 в 13:29)
| | В принципе на JQuery проще всего:
$('#hsize0 option:selected').text();
|
| |
|
|
|
|
|
|
|
для: bishake
(16.07.2010 в 13:49)
| | На jQuery ещё проще так:
(если нужно именно значение атрибута value получить, а не подпись) | |
|
|
|
|
|
|
|
для: sms-send
(16.07.2010 в 13:54)
| | Что за мания - лишь бы ляпнуть? Прочитайте ещё раз пост, на который Вы ответили после меня | |
|
|
|
|
|
|
|
для: bishake
(16.07.2010 в 14:02)
| | Извините, пожалуйста, ошибся. | |
|
|
|
|
|
|
|
для: DJ Paltus
(16.07.2010 в 13:29)
| |
onchange="with (this) {alert (options [selectedIndex].value); alert (options [selectedIndex].text)}"
| И то, и другое (и value, и text) - по умолчанию строки.
Поэтому перед сложением значений надо перевести их в числа (лучше, ибо это работает быстрее всего остального, помножить их на единичку).
Ну а если будете умножать, делить или вычитать, то можно ничего предварительно не делать. | |
|
|
|
|
|
|
|
для: АЯ
(16.07.2010 в 13:55)
| | Получилось вот так:
<script>
function count(idx) {
var ob = document.getElementById('hsize'+idx);
var width = ob.value;
document.getElementById('dd'+idx).innerHTML = width;
with(ob) var w = options[selectedIndex].text;
var prc = document.getElementById('mat'+idx).value;
document.getElementById('pp'+idx).innerHTML = prc*w*width/10000;
}
</script>
|
Всё верно сделал?
(рабочая версия вот: http://mumm-36.narod.ru/test.html) | |
|
|
|
|
|
|
|
для: DJ Paltus
(16.07.2010 в 14:27)
| | На этот вопрос лучше всего Вам ответит IE6 и остальные браузеры ;-) | |
|
|
|