Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #31 (permalink)  
Старый 19.07.2018, 13:29
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Вот такие костыли
Агрегат
<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, 23.07.2018 в 13:12.
Ответить с цитированием
  #32 (permalink)  
Старый 19.07.2018, 13:43
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Dilettante_Pro,
если представить данные нормально, то костыли не потребуются. )
Ответить с цитированием
  #33 (permalink)  
Старый 19.07.2018, 14:05
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

laimas,
Кто бы спорил....
Ответить с цитированием
  #34 (permalink)  
Старый 19.07.2018, 14:19
Интересующийся
Отправить личное сообщение для kk450 Посмотреть профиль Найти все сообщения от kk450
 
Регистрация: 14.06.2018
Сообщений: 25

Dilettante_Pro,
Блин дружище, ты не представляешь как выручил. Спасибо!

laimas,
Идеалу нет предела ))) Любое решение имеет право на жизнь, если оно работает )
Ответить с цитированием
  #35 (permalink)  
Старый 19.07.2018, 14:30
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от kk450
Любое решение имеет право на жизнь, если оно работает
Говорят, что штаны и через голову одеть можно, однако все поступают разумно
Ответить с цитированием
  #36 (permalink)  
Старый 20.07.2018, 07:45
Интересующийся
Отправить личное сообщение для kk450 Посмотреть профиль Найти все сообщения от kk450
 
Регистрация: 14.06.2018
Сообщений: 25

laimas,

А вы бы как сделали? в данном случае?
Ответить с цитированием
  #37 (permalink)  
Старый 20.07.2018, 07:57
Интересующийся
Отправить личное сообщение для kk450 Посмотреть профиль Найти все сообщения от kk450
 
Регистрация: 14.06.2018
Сообщений: 25

Dilettante_Pro,
В последней версии кода заметил что при загрузке страницы для dost1 пункта "ДА" не присваивается первоначальное значение, чтобы избежать проблем в будущем в форме поставил значения:
<select name='dost1'>
 <option value='0'>Нет</option> 
 <option value='0'>Да</option>
</select>


Так и задумано? первичное значение записываем руками?


upd:

оказывается проблема еще глубже - если у значения у dost1 вариант ДА уже есть значение то оно суммируется
например в data-dost мы указали 5, а по умолчанию было 2 то получится 7. Хотя должно быть 5

а если по умолчанию у dost1 Значение ДА value мы ставим 0, то далее эта опция не учитывается

Последний раз редактировалось kk450, 20.07.2018 в 08:17.
Ответить с цитированием
  #38 (permalink)  
Старый 20.07.2018, 10:21
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от kk450
А вы бы как сделали? в данном случае?
Для этого нужно знать чего же вам нужно. В общем у вас в вопросе заявлено два взаимоисключающих желанию - и представить сразу, и рассчитывать цены. Но и в том, и в другом случае они что должны просто вываливаться на страницу, где "JS костылями" клиент должен мучится или же не просто вывалить, а с пользой?
Ответить с цитированием
  #39 (permalink)  
Старый 20.07.2018, 11:02
Интересующийся
Отправить личное сообщение для kk450 Посмотреть профиль Найти все сообщения от kk450
 
Регистрация: 14.06.2018
Сообщений: 25

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 отключить --!>

Последний раз редактировалось kk450, 20.07.2018 в 11:05.
Ответить с цитированием
  #40 (permalink)  
Старый 20.07.2018, 12:25
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Сообщение от kk450
если у значения у dost1 вариант ДА уже есть значение то оно суммируется
например в data-dost мы указали 5, а по умолчанию было 2 то получится 7. Хотя должно быть 5
Подстругал костыль пост 31
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Значение из select option vnmslf jQuery 19 21.07.2016 12:09
Проблемы с выпадающим списком JavaScript ursus102 Общие вопросы Javascript 0 16.01.2016 19:30
Выводить значение раньше переменных Гробовщик Общие вопросы Javascript 11 10.09.2013 08:42
Метод для конвертирования едениц px, em, %, pt. jegit Элементы интерфейса 0 07.03.2013 16:15
Как сохранить предыдущее значение select? MaxD Общие вопросы Javascript 3 21.07.2011 12:36