Вот такие костыли:cray:
Агрегат
<select name='sel1'>
<option value='1480' data-dost='50'>Вал тип 1</option>
<option value='2556' data-dost='80'>Вал тип 2</option>
</select><br>
Цена: <span id="sel1">0</span> руб <br>
Центральная смазка
<select name='sel2'>
<option value='0' data-dost='0'>Нет</option>
<option value='23' data-dost='0'>Да</option>
</select><br>
Цена: <span id="sel2">0</span> руб <br>
Двойной подшипник
<select name='sel3'>
<option value='0' data-dost='0'>Нет</option>
<option value='22' data-dost='0'>Да</option>
</select><br>
Цена: <span id="sel3">0</span> руб <br>
Общая стоимость выбранных позиций: <span id="sum">0</span> руб<br><br>
<table>
<tr>
<td>Доставка и запуск под ключ</td>
<td>
<select name='dost1'>
<option value='0'>Нет</option> <!-- в случае выбора этого пункта прибавить 0 к итогу -->
<option value='-0'>Да</option> <!-- в случае выбора этого пункта, заблокировать dost2 прибавить 3000 к итогу -->
</select></td>
<td><span id="dost1">0</span>руб</td></tr>
<tr>
<td>Доставка до склада</td>
<td>
<select name='dost2'>
<option value='-1'>Нет</option>
<option value='0'>Омск</option> <!-- value = 0% от sel1 -->
<option value='1.5'>Новосибирск</option> <!-- в случае выбора этого пункта, заблокировать dost1 и
прибавить 1.5% от sel1 к итогу -->
<option value='3'>Москва</option> <!-- в случае выбора этого пункта, заблокировать dost1 и
прибавить 3% от sel1 к итогу -->
</select></td>
<td><span id="dost2">0</span>руб</td>
</tr>
</table>
<b>Итого с доставкой: <span id="result">0</span> руб<b>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script type="text/javascript">
var sum = 0, dost = 0, dostA = 0, base = 0;
var dost1 = $("select[name='dost1']"), dost2 = $("select[name='dost2']");
$(document).ready(function(){ $("select[name^='sel']").trigger('change'); }); //Установить цену при загрузке страницы
$("select[name^='sel']").change(function() {
if(this.name == 'sel1') base = +this.value;
$("#"+ this.name).html(splitRange(+this.value));
dostA = 0;
var s = $('select[name^="sel"] option:selected').map(function() {
dostA += +this.dataset.dost;
return this.value;
}).get();
dost1.change();
dost2.change();
sum = s.reduce((pv, cv) => {
return pv + (parseFloat(cv) || 0);
}, 0);
$("#sum").text(splitRange(sum)); //Разделить разряды
$('#result').text(splitRange(sum + dost));
});
dost1.change(function() {
if(this.value == '0') {
// dost1.hide();
dost2.show();
}
else {
dost2.hide();
};
dost = this.value;
dost = dost=='0'?0:dostA;
$("#"+ this.name).html(splitRange(dost));
$('#result').text(splitRange(sum + dost));
});
dost2.change(function() {
if(this.value == '-1') {
// dost2.hide();
dost1.show();
dost = 0;
}
else {
dost1.hide();
dost =Math.round(base * (+this.value) / 100);
};
$("#"+ this.name).html(splitRange(dost));
$('#result').text(splitRange(sum + dost));
});
function splitRange(val) {
var str = val.toString();
return str.replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 ');
}
function joinRange(val) {
return val.replace(/\s/gi,'');
};
</script>
|
Dilettante_Pro,
если представить данные нормально, то костыли не потребуются. ) |
laimas,
Кто бы спорил.... |
Dilettante_Pro,
Блин дружище, ты не представляешь как выручил. Спасибо! laimas, Идеалу нет предела ))) Любое решение имеет право на жизнь, если оно работает ) |
Цитата:
|
laimas,
А вы бы как сделали? в данном случае? |
Dilettante_Pro,
<select name='dost1'> <option value='0'>Нет</option> <option value='0'>Да</option> </select> Так и задумано? первичное значение записываем руками? upd: оказывается проблема еще глубже - если у значения у dost1 вариант ДА уже есть значение то оно суммируется например в data-dost мы указали 5, а по умолчанию было 2 то получится 7. Хотя должно быть 5 а если по умолчанию у dost1 Значение ДА value мы ставим 0, то далее эта опция не учитывается |
Цитата:
|
laimas,
Давайте с самого начала: нужна форма которая суммирует: стоимость товара + дополнительные опции + доставку Наименование: Вариант 1. Вал коленчатый (производство Россия) - базовая цена1 100руб / цена2 с доставкой и установкой - 130руб Вариант 2. Вал коленчатый (производство Беларусь) - базовая цена1 80руб / цена2 с доставкой и установкой - 125руб Опция 1 (вкладыши коренные): Вариант 1. Нет - прибавить 0руб Вариант 2. Вкладыши производство Россия - прибавить 35руб Вариант 3. Вкладыши производство Беларусь - прибавить 30руб Опция 2 (вкладыши шатунные): Вариант 1. Нет - прибавить 0руб Вариант 2. Вкладыши производство Россия - прибавить 20руб Вариант 3. Вкладыши производство Беларусь - прибавить 18руб Доставка двух видов ____________________________________ Доставка + Запуск + Гарантия (Тип 1) Вариант 1. Нет <!-- прибавить к общей сумме 0 (ноль) + Доставку тип 2 если отключена включить --!> Вариант 2. Да <!-- вместо базовой цены1 прибавить цену2 + Доставку тип 2 отключить --!> Доставка до склада (Тип 2) Вариант 1. Омск (основной склад) <!-- прибавить к общей сумме 0 (ноль) + Доставку тип 1 если отключена включить --!> Вариант 2. Москва <!-- прибавить к общей сумме 1% от базовой цены текущего товара + Доставку тип 1 отключить --!> Вариант 3. Питер <!-- прибавить к общей сумме 2% от базовой цены текущего товара + Доставку тип 1 отключить --!> |
Цитата:
|
| Часовой пояс GMT +3, время: 09:21. |