Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как сделать, чтобы значения input radio в переменной обновлялись при нажатии (https://javascript.ru/forum/jquery/41132-kak-sdelat-chtoby-znacheniya-input-radio-v-peremennojj-obnovlyalis-pri-nazhatii.html)

Mitrich 01.09.2013 16:12

Как сделать, чтобы значения input radio в переменной обновлялись при нажатии
 
Приветствую!
У меня калькулятор цен. Всё работает, но есть проблема:

1 есть Блок радиокнопок
2 Их значения записываются в переменную
var premises =  $("input[name='premises']:checked").val();

3 Конечная формула в которой суммируются все переменные вместе с этой
var amount = Math.ceil ((сamcorders_a + сamcorders_b) * distance_between * max_h * premises * lifetime * cost_of_time + psu * cost_of_time);


И вроде бы всё OK.., Ан нет...
Дело в том, что при переключении радиобатонов переменная premises не обновляется на лету, а только после того как будет изменено одно из значений других обычных input(ов) ):
Мало того. что это бесит, но это ещё даёт не верный результат, когда при пересчёте последним действием юзер выбирает из вариантов блока радиокнопок...


Как быть?

Mitrich 01.09.2013 16:14

На всякий случай полный код:
jQuery(document).ready(function($){
		window.onload = function(){
		var intc = document.querySelectorAll(".int");
		var result = document.getElementById("total");
		
		for(var n = 0; n <= intc.length - 1; n++){
			intc[n].addEventListener("keyup", function(){
						
				
				var сamcorders_a = (parseFloat(intc[0].value))*0.835;
				var сamcorders_b = (parseFloat(intc[1].value))*0.501;
				var amt_сamcorders = (parseFloat(intc[0].value))+(parseFloat(intc[1].value));
				var distance_between = (parseFloat(intc[2].value));
				var max_h = (parseFloat(intc[3].value));
				var psu = (parseFloat(intc[4].value));
				var premises =  $("input[name='premises']:checked").val();
				
				var lifetime = (parseFloat(intc[8].value));
				var cost_of_time = 801;
				
		
				if(distance_between <= 50){
					distance_between  = 1;
				}
				else if(50 < distance_between && distance_between <= 70){
					distance_between  = 1.1;
				}
				else if(70 < distance_between && distance_between <= 100){
					distance_between  = 1.2;
				}
				else if(100 < distance_between){
					distance_between  = 1.3;
				}
				if(max_h <= 3){
					max_h  = 1;
				}
				else if(3 < max_h ){
					max_h  = 1.3;
				}
				if(psu <= (amt_сamcorders/5)){
					psu  = 0;
				}
				else if(psu > (amt_сamcorders/5)){
					psu  = (amt_сamcorders/5)*0.3*1.67;
				}
				
				if(lifetime <= 1){
					lifetime  = 1;
				}
				else if(1 < lifetime && lifetime <= 3){
					lifetime  = 1.1;
				}
				else if(3 < lifetime ){
					lifetime  = 1.2;
				}
				
				var amount = Math.ceil ((сamcorders_a + сamcorders_b) * distance_between * max_h * premises * lifetime * cost_of_time + psu * cost_of_time);
			if(isNaN(amount)){
					amount = 'Пожалуйста заполните все поля калькулятора';
				}
				result.innerHTML =  amount;
				
			}, false);
		}

	}
$("#button1").click( function() {
$('.bt').css({'display': 'block' });


});
$(".int").click( function() {
$('.bt').css({'display': 'none' });
});
	});

Mitrich 03.09.2013 17:49

Мне казалось, что написание калькуляторов цен весьма распрастранённое дело...
Не уж то никто не сталкивался с подобной проблемой? );
Или на неё просто забивают?...

рони 03.09.2013 18:47

Mitrich,
может поставить клик на радио а не keyup и определится бы jQuery или не jQuery но это как хотите


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