Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   пересчет суммы в заказе в зависимости от выбраных чекбоксов (https://javascript.ru/forum/dom-window/29391-pereschet-summy-v-zakaze-v-zavisimosti-ot-vybranykh-chekboksov.html)

rick_77 29.11.2018 16:29

Всё увидел...

rick_77 29.11.2018 16:42

https://photos.google.com/search/_tr...aWbeZtHE?hl=ru
Необходимо ввести в область 1 количество горючего, при выборе в меню определённого пункта (область 2), а в области 3 отображается ТО количество горючего , которое необходимо выдать с учётом норм.

laimas 29.11.2018 17:31

Можно, но зачем, словами что не проще ответить? Спрашивается то простое.

Пишу все, далее думайте. Нельзя в DIV помещать TD.

Пусть есть форма со списком, в котором по выбору рассчитывается нечто и отображается на клиенте как результат выбора. Данный расчет на клиенте чисто для клиента и серверу на него наплевать, ему нужен выбор клиента. То есть клиент выбрал, увидел, удовлетворился и отправил форму. Сервер по полученному значению произвел расчет и ... далее не знаю для чего.

Вывод списка, что у вас, это какая-то профанация - переменная $_SESSION['temperatura'] не являясь набором может иметь только одно значение, а значит ваш список может иметь только 3 опции, так как опции выводятся по условию (и заметьте, что это у вас попытка вывода, ибо это не вывод, а сплошные ошибки), что, судя по задаче, совсем не то что нужно.

Судя по "хотению" переменная $_SESSION['temperatura'] хранит ранее выбранное пользователем значение и если был выбор, то делает соответствующую опцию в списке выбранной. Но выводить список как каждую опцию отдельно, определяя выбор в списке, это не гут, вывод производится в цикле, а параметры опций определяются значениями из описанного набора. Коли у вас "руками" значит такой набор нужно описать в массиве. При этом опция <option>Выберите температуру</option> лишняя, так как опция <option value="1">Температура выше 0</option> фактически есть опция по умолчанию, то есть изначально это и есть выбор.

//данные для выбора
$data = [
    1 => ['title'=> 'Температура выше 0', 'percent'=>0],
    ['title'=> 'от 0 до -5 градусов', 'percent'=>.2],
    ['title'=> 'от -5 до -10 градусов', 'percent'=>.4],
    ['title'=> 'от -10 до -15 градусов', 'percent'=>.6],
    ['title'=> 'от -15 до -20 градусов', 'percent'=>.8],
    ['title'=> 'от -20 до -25 градусов', 'percent'=>.10],
    ['title'=> 'от -25 и ниже', 'percent'=>.12]
];

//вывод списка в форме (я не привожу код формы и как список располагается в ней)
echo '<select name="percent" id="T">';
//если $_SESSION['temperatura'] определена (был уже выбор) и равна ключу массива данных, то опция списка будет выбрана
foreach($data as $k=>$v) echo '<option data-percent="'.$v['percent'].'" value="'.$k.'" '.($_SESSION['temperatura']==$k ? 'selected' : null).'>'.$v['title'].'</option>';

echo '</select>';


Далее расчет на клиенте (код должен быть расположен ниже кода формы и элемента span в котором будет вывод расчета или ... ладно, пока опустим)

<!-- в этом элементе будет отображается и сумма при расчете -->
<span id="total">250</span>

<script>
var gor_vydat = 250; //откуда это берется вопрос, ну пусть где-то, как-то, в общем значение передано на клиента
//рассчитываем по выбору
document.getElementById('T').onchange = function() {
    document.getElementById('total').innerHTML = gor_vydat + gor_vydat * this.options[this.value-1].getAttribute('data-percent');
}
</script>


Пощелкал пользователь, выбрал, подходит ему, отправляет форму. Сервер принимая ее проверяет истинность данных и если ОК, производит расчет, выводит результат и опять форму, иначе какая надобность в $_SESSION['temperatura']? То есть прием формы должен быть кодом расположенным до вывода формы.

if($d = (int)$_GET['percent'] AND key_exists($d, $data)) {
    //данные с клиента не левые, расчет
    $total = 250 + 250 * $data[$d]['percent'];
    //запомнить выбор в сессии
    $_SESSION['temperatura'] = $d;
}


Если форма должна отправляться при каждом выборе в списке, то никакого расчета на клиенте не надо (это нелогично), data атрибуты в опциях тоже не нужны, и по событию просто обновлять страницу с передачей текущего значения в списке.

У меня не так много времени, чтобы вытягивать из вас по капельке, поэтому читайте, думайте и всегда отвечайте на вопросы полно.

rick_77 29.11.2018 17:35

Ого! Большущая благодарность за проделанную работу! Приступаю к чтению и опробации! Ещё раз благодарю!

rick_77 29.11.2018 17:38

Понял на счёт вопросов. Буду стараться описывать ситуацию по полной! Удачи и Вам!


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