Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Два условия в расчете в калькуляторе (https://javascript.ru/forum/misc/70192-dva-usloviya-v-raschete-v-kalkulyatore.html)

romanmysin 18.08.2017 04:45

Два условия в расчете в калькуляторе
 
Добрый день.
Прошу помощи с калькулятором на сайте.

Сейчас работает по принципу:
Если стоит галочка,
то сумма1+15%,
иначе сумма2+15%

Необходимо добавить еще одно условие, при котором, если 15% меньше 2500, то прибавляем не 15%, а 2500.

То есть должно получиться:
Если стоит галочка,
то Если сумма1+15% < сумма1+2500,
то сумма1+2500,
иначе Если сумма2+15% < сумма2+2500,
то сумма2+2500


if ( $('#id_16 input').prop('checked') )  result_proc =(parseFloat($('#id_1 option:selected').val())+parseFloat($('#id_8 option:selected').val())+parseFloat($('input:radio[name=radio_9]:checked').val())+parseFloat($('input:radio[name=radio_10]:checked').val())+parseFloat($('#id_7 option:selected').val())+parseFloat($('#id_16 input').val()))+(parseFloat($('#id_1 option:selected').val())+parseFloat($('#id_8 option:selected').val())+parseFloat($('input:radio[name=radio_9]:checked').val())+parseFloat($('input:radio[name=radio_10]:checked').val())+parseFloat($('#id_7 option:selected').val())+parseFloat($('#id_16 input').val()))*0.15; else  result_proc =(parseFloat($('#id_1 option:selected').val())+parseFloat($('#id_8 option:selected').val())+parseFloat($('input:radio[name=radio_9]:checked').val())+parseFloat($('input:radio[name=radio_10]:checked').val())+parseFloat($('#id_7 option:selected').val()))+(parseFloat($('#id_1 option:selected').val())+parseFloat($('#id_8 option:selected').val())+parseFloat($('input:radio[name=radio_9]:checked').val())+parseFloat($('input:radio[name=radio_10]:checked').val())+parseFloat($('#id_7 option:selected').val()))*0.15

Nexus 18.08.2017 07:56

romanmysin, а в чем у вас сложность возникла?

romanmysin 18.08.2017 20:42

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

посмотрите, пжлста, вот такой получился последний вариант с двумя условиями.
скорее какие-то скобки или ; или знак < не так я ставлю ...

if ( $('#id_16 input').prop('checked') )  result_proc =if ((parseFloat($('#id_1 option:selected').val())+parseFloat($('#id_8 option:selected').val())+parseFloat($('input:radio[name=radio_9]:checked').val())+parseFloat($('input:radio[name=radio_10]:checked').val())+parseFloat($('#id_7 option:selected').val())+parseFloat($('#id_16 input').val()))*0,15<2500) result_proc =(parseFloat($('#id_1 option:selected').val())+parseFloat($('#id_8 option:selected').val())+parseFloat($('input:radio[name=radio_9]:checked').val())+parseFloat($('input:radio[name=radio_10]:checked').val())+parseFloat($('#id_7 option:selected').val())+parseFloat($('#id_16 input').val()))+2500; else  (parseFloat($('#id_1 option:selected').val())+parseFloat($('#id_8 option:selected').val())+parseFloat($('input:radio[name=radio_9]:checked').val())+parseFloat($('input:radio[name=radio_10]:checked').val())+parseFloat($('#id_7 option:selected').val())+parseFloat($('#id_16 input').val()))+(parseFloat($('#id_1 option:selected').val())+parseFloat($('#id_8 option:selected').val())+parseFloat($('input:radio[name=radio_9]:checked').val())+parseFloat($('input:radio[name=radio_10]:checked').val())+parseFloat($('#id_7 option:selected').val())+parseFloat($('#id_16 input').val()))*0,15; else if ((parseFloat($('#id_1 option:selected').val())+parseFloat($('#id_8 option:selected').val())+parseFloat($('input:radio[name=radio_9]:checked').val())+parseFloat($('input:radio[name=radio_10]:checked').val())+parseFloat($('#id_7 option:selected').val()))*0,15<2500) result_proc =(parseFloat($('#id_1 option:selected').val())+parseFloat($('#id_8 option:selected').val())+parseFloat($('input:radio[name=radio_9]:checked').val())+parseFloat($('input:radio[name=radio_10]:checked').val())+parseFloat($('#id_7 option:selected').val()))+2500; else (parseFloat($('#id_1 option:selected').val())+parseFloat($('#id_8 option:selected').val())+parseFloat($('input:radio[name=radio_9]:checked').val())+parseFloat($('input:radio[name=radio_10]:checked').val())+parseFloat($('#id_7 option:selected').val()))+(parseFloat($('#id_1 option:selected').val())+parseFloat($('#id_8 option:selected').val())+parseFloat($('input:radio[name=radio_9]:checked').val())+parseFloat($('input:radio[name=radio_10]:checked').val())+parseFloat($('#id_7 option:selected').val()))*0,15

Nexus 18.08.2017 23:30

romanmysin, может так?
var summ=0,//сумма
	data={//айдишники полей
		options:[1,8,7],//опции
		radio:[9,10]//радио
		input:[]//инпуты
	},
	selectors={
		options:'#id_%id% option:selected',
		radio:'input[type="radio"][name=radio_%id%]:checked',
		input:'#id_%id% input'
	};
	percent=15,//надбавка в процентах
	min_percent_value=2500;//минимальная надбавка

if($('#id_16 input').prop('checked'))
	data.input.push(16);

for(var i in data){
	if(!data.hasOwnProperty(i)) 
		continue;
	
	for(var j=0;j<data[i].length;j++){
		summ+=parseFloat($(selectors[i].replace('%id%',data[i][j])).val());
	};
};
var plus=summ*(percent/100);//Получаю значение надбавки
plus=plus>=min_percent_value?plus:min_percent_value;//Если надбавка меньше минимальной надбавки, то надбавка равна минимальной...

result_proc=summ+plus;


Upd. Псевдо класс «radio» разве существует?

romanmysin 19.08.2017 01:42

спасибо за ответ, но не сработало.
решил модернизацией своего кода с помощью того же конструктора.

Если ( галочка ) То

Если ( № 1 × 0.15 < 2500 ) То
Результат = № 1 + 2500
Иначе
Результат = № 1 + № 1 × 0.15

Иначе Если ( № 2 × 0.15 < 2500 ) То
Результат = № 2 + 2500
Иначе
Результат = № 2 + № 2 × 0.15

if ( $('#id_3 input').prop('checked') )  if ( parseFloat($('#id_1 option:selected').val())*0.15<2500 )  result_proc =parseFloat($('#id_1 option:selected').val())+2500; else  result_proc =parseFloat($('#id_1 option:selected').val())+parseFloat($('#id_1 option:selected').val())*0.15; else  if ( parseFloat($('#id_2 option:selected').val())*0.15<2500 )  result_proc =parseFloat($('#id_2 option:selected').val())+2500; else  result_proc =parseFloat($('#id_2 option:selected').val())+parseFloat($('#id_2 option:selected').val())*0.15

Nexus 19.08.2017 09:52

romanmysin, в вашем "итоговом коде" используются совершенно другие поля.
Ну да ладно, работает как нужно и фиг с ним.

рони 19.08.2017 10:30

romanmysin,
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

romanmysin 19.08.2017 11:41

да, переменных меньше, т.к. воспроизводить заново полностью с бОльшим числом переменных было тяжело и объединил суммы в одну. Нужно было для примера - как и куда вставляются условия.
спасибо Nexus и Рони.

laimas 19.08.2017 11:52

Цитата:

Сообщение от рони
О том, как вставить в сообщение

Лучше не стало. :)

рони 19.08.2017 11:56

laimas,
тут даже http://jsbeautifier.org/ бессилен! :)


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