Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Настройка калькулятора (https://javascript.ru/forum/dom-window/60631-nastrojjka-kalkulyatora.html)

enable209 12.01.2016 10:15

Настройка калькулятора
 
Добрый день, на сайте есть простенький калькулятор, который не работает(. Прошу помощи в настройке, так как сам в js совсем не соображаю. Заранее Спасибо тем, кто не останется равнодушным и поможет!

Задача такова:
1. При выборе глубины скважины * тип трубы = Стоимость скважины
2. При выборе типа обустройства = Стоимость обустройства
3. Стоимость скважины + Стоимость обустройства = Итого

jQuery(function(){	
		var ts = new Date(2016, 3, 19,23,0,0,0),
			newYear = false;
			
		jQuery('.countdown').countdown({
			timestamp	: ts			
		});
	});	
	
	 $(function() {
		$( ".sliderIn" ).slider({
			max: 150,
			min: 0,
			step:1,
			value:0,
			range:'min',
			 slide: function( event, ui ) {
$( ".inCount" ).val(  ui.value );


		var a = parseFloat($("#inCount").val());
		var b = parseFloat($("#outCount").val());
		
		var c = parseFloat($(".radioList input:checked").val());
		
		var a1 = a*c
		var b1 = a1+a-b
		
		var c1 = b1*12
		
		var a11 = a.toString().replace(/(\d{1,3})(?=(?:\d{3})+$)/g, '$1 ')
		var b11 = b1.toString().replace(/(\d{1,3})(?=(?:\d{3})+$)/g, '$1 ')
		var c11 = c1.toString().replace(/(\d{1,3})(?=(?:\d{3})+$)/g, '$1 ')
		
		jQuery("#inMon").text(a11+' руб.');
		jQuery("#outMon").text(b11+' руб.');
		jQuery("#sumMon").text(c11+' руб.');
		
		jQuery(".invested .interBox").height(a/20000);
		jQuery(".received .interBox").height(b1/20000);

}
		});
		 $( ".inCount" ).val( $( ".sliderIn" ).slider( "value" ) );
	});
	
	 $(function() {
		$( ".sliderOut" ).slider({
			max: 450000,
			min: 0,
			step:1000,
			value:50000,
			range:'min',
			 slide: function( event, ui ) {
$( ".outCount" ).val(  ui.value );

var a = parseFloat($("#inCount").val());
		var b = parseFloat($("#outCount").val());
		
		var c = parseFloat($(".radioList input:checked").val());
		
		var a1 = a*(c/100)
		var b1 = a1+a-b
		
		var c1 = b1*12
		
		var a11 = a.toString().replace(/(\d{1,3})(?=(?:\d{3})+$)/g, '$1 ')
		var b11 = b1.toString().replace(/(\d{1,3})(?=(?:\d{3})+$)/g, '$1 ')
		var c11 = c1.toString().replace(/(\d{1,3})(?=(?:\d{3})+$)/g, '$1 ')
		
		jQuery("#inMon").text(a11+' руб.');
		jQuery("#outMon").text(b11+' руб.');
		jQuery("#sumMon").text(c11+' руб.');
		
		jQuery(".invested .interBox").height(a/20000);
		jQuery(".received .interBox").height(b1/20000);


}
		});
		 $( ".outCount" ).val( $( ".sliderOut" ).slider( "value" ) );
	});
	
	$(function() {
		
		var a = parseFloat($("#inCount").val());
		var b = parseFloat($("#outCount").val());
		
		var c = parseFloat($(".radioList input:checked").val());
		
		var a1 = a*(c/100)
		var b1 = a1+a-b
		
		var c1 = b1*12
		
		var a11 = a.toString().replace(/(\d{1,3})(?=(?:\d{3})+$)/g, '$1 ')
		var b11 = b1.toString().replace(/(\d{1,3})(?=(?:\d{3})+$)/g, '$1 ')
		var c11 = c1.toString().replace(/(\d{1,3})(?=(?:\d{3})+$)/g, '$1 ')
		
		jQuery("#inMon").text(a11+' руб.');
		jQuery("#outMon").text(b11+' руб.');
		jQuery("#sumMon").text(c11+' руб.');
		
		jQuery(".invested .interBox").height(a/20000);
		jQuery(".received .interBox").height(b1/20000);
	});
	
	jQuery(".calcBox input").on("change, click", function(){
		var a = parseFloat($("#inCount").val());
		var b = parseFloat($("#outCount").val());
		
		var c = parseFloat($(".radioList input:checked").val());
		
		var a1 = a*(c/100)
		var b1 = a1+a-b
		
		var c1 = b1*12
		
		var a11 = a.toString().replace(/(\d{1,3})(?=(?:\d{3})+$)/g, '$1 ')
		var b11 = b1.toString().replace(/(\d{1,3})(?=(?:\d{3})+$)/g, '$1 ')
		var c11 = c1.toString().replace(/(\d{1,3})(?=(?:\d{3})+$)/g, '$1 ')
		
		jQuery("#inMon").text(a11+' руб.');
		jQuery("#outMon").text(b11+' руб.');
		jQuery("#sumMon").text(c11+' руб.');
		
		jQuery(".invested .interBox").height(a/20000);
		jQuery(".received .interBox").height(b1/20000);


Ниже отрывок из index.php может тоже пригодится.

<section class="howToEarn">
		<div class="res">
			<h1>Калькулятор <span class="din_bold">скважины</span></h1>
			<div class="calculator"><form>
				
				<div class="calcBox">
				            <span class="cbTitle">Введите исходные данные</span>
				            <div class="cbLine">
				                <span class="cblTitle">Глубина скважины, м.</span>
				                <div>
				                	<input class="inCount" id="inCount" name="in" type="text" value="0">
				                    <div class="sliderBox bbox sliderIn"></div>
				                	<div class="priceList"> <span>0 м.</span> <span>50 м.</span> <span>100 м.</span> <span>150 м.</span></div>
				                </div>
				            </div>
                                                <div class="procBox">
				            	<span class="pbTitle">Тип трубы:</span>
				                <div class="radioList">
				                	<label><input class="niceRadio" type="radio" name="proc" value="1600" id="proc_0" checked>Металл ⌀133</label>
				                    <label><input class="niceRadio" type="radio" name="proc" value="1900" id="proc_1">Металл ⌀133 + Пластик ⌀117</label>
				                </div>
				            </div>
                                            <br>
                                            <br>
				            <div class="procBox">
				            	<span class="pbTitle">Тип обустройства:</span>
				                <div class="radioList">
				                	<label><input class="niceRadio" type="radio" name="proc" value="35500" id="proc_0" checked>Летний </label>
                                                    <label><input class="niceRadio" type="radio" name="proc" value="100000" id="proc_2">Металлический кессон </label>
				                </div>
				            </div>
	          </div>
				<input type="hidden" name="user_data[url]" value="landing_opt_real" />
			</form></div>
                                <div class="investedReceived">
				<div class="invested">
					<div class="interBox"><div class="textBox">Стоимость скважины<span id="inMon">20 000 руб.</span></div></div>
			         </div>
                                <div class="received">
					<div class="interBox"><div class="textBox">Стоимость обустройства<span id="outMon">53 000 руб.</span></div></div>   
				</div>
				<div class="clear"></div>
				<p class="month12">Итого:</p>
				<span class="summ" id="sumMon">636 000 руб.</span>
				<a class="popup_t want but din_bold" href="javascript:void(0)">Хочу заказать</a>

рони 12.01.2016 11:27

enable209,
name и id у строк 19, 20 и 28,29 должно быть разным!!!
да и сами блоки procBox должны же хоть чем-то отличатся?
ваши обрывки кода плохо подходят для локализации кода, хорошо хоть задачу лаконично сформулировали.

и нафига столько $(function() и jQuery(function() хватило бы одной таблетки на весь код!

enable209 12.01.2016 11:55

Цитата:

Сообщение от рони (Сообщение 403381)
enable209,
name и id у строк 19, 20 и 28,29 должно быть разным!!!
да и сами блоки procBox должны же хоть чем-то отличатся?
ваши обрывки кода плохо подходят для локализации кода, хорошо хоть задачу лаконично сформулировали.

и нафига столько $(function() и jQuery(function() хватило бы одной таблетки на весь код!

Это делал не я) так что ответить на вопрос "нафига?" не могу к сожалению. Не могли бы вы мне помочь, откорректировав данный код так как это должно быть и что для этого требуется от меня? могу целиком скинуть main.js и index.php

рони 12.01.2016 12:24

slider ui калькулятор для скважины
 
enable209,
смотрите внимательно весь код!!!
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <link rel="stylesheet" href="http://code.jquery.com/ui/1.11.0/themes/smoothness/jquery-ui.css">

  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>

  <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
   <style type="text/css">
.sliderIn{
    margin:20px;
    width:500px;
    height:5px;
  }

  .ui-slider-handle{
    border-radius:50%;
    position:relative;
    font-size:14px;
    display:block;
  }

  .ui-slider-horizontal .ui-slider-handle{
    top:0.5em;
    background:transparent;
    border-radius:0%;
    width:0;
    height:0;
    border-top:none;
    text-decoration:none;
    border-left:7px solid transparent;
    border-right:7px solid transparent;
    border-bottom:14px solid red;
  }


  .ui-slider-horizontal .ui-slider-handle:last-of-type{
    background:transparent;
    border-bottom:none;
    border-top:14px solid red;
    top:-1.2em;
  }

  .ui-slider-horizontal .ui-slider-handle:last-of-type:focus {
 outline: 0;

 }
  .active {
    background-color: #0000CD;
    color: #FFFFFF;
  }
  .priceList span {
    border-radius: 8px;
    padding: 2px 8px;
    cursor: pointer;
    border: 1px solid #0000CD
  }

  </style>

</head>

<body><section class="howToEarn">
		<div class="res">
			<h1>Калькулятор <span class="din_bold">скважины</span></h1>
			<div class="calculator"><form>

				<div class="calcBox">
				            <span class="cbTitle">Введите исходные данные</span>
				            <div class="cbLine">
				                <span class="cblTitle">Глубина скважины, м.</span>
				                <div>
				                	<input class="inCount" id="inCount" name="in" type="text" value="0">
				                    <div class="sliderBox bbox sliderIn"></div>
				                	<div class="priceList"> <span>0 м.</span> <span>50 м.</span> <span>100 м.</span> <span>150 м.</span></div>
				                </div>
				            </div>
                           <div class="procBox">
				            	<span class="pbTitle">Тип трубы:</span>
				                <div class="radioList">
				                	<label><input class="niceRadio" type="radio" name="tube" value="1600"  checked>Металл ⌀133</label>
				                    <label><input class="niceRadio" type="radio" name="tube" value="1900" >Металл ⌀133 + Пластик ⌀117</label>
				                </div>
				            </div>
                                            <br>
                                            <br>
				            <div class="procBox">
				            	<span class="pbTitle">Тип обустройства:</span>
				                <div class="radioList">
				                	<label><input class="niceRadio" type="radio" name="proc" value="35500"  checked>Летний </label>
                                    <label><input class="niceRadio" type="radio" name="proc" value="100000" >Металлический кессон </label>
				                </div>
				            </div>
	          </div>
				<input type="hidden" name="user_data[url]" value="landing_opt_real" />
			</form></div>
                                <div class="investedReceived">
				<div class="invested">
					<div class="interBox"><div class="textBox">Стоимость скважины : <span id="inMon">20 000 руб.</span></div></div>
			         </div><br>
                                <div class="received">
					<div class="interBox"><div class="textBox">Стоимость обустройства : <span id="outMon">53 000 руб.</span></div></div>
				</div>
				<div class="clear"></div>
				<p class="month12">Итого:</p>
				<span class="summ" id="sumMon">636 000 руб.</span>
				<a class="popup_t want but din_bold" href="javascript:void(0)">Хочу заказать</a>
              </div>
             </div>
            </section>
<script>
jQuery(function() {
    var c = {
            0: 0,
            50: 1,
            100: 2,
            150: 3
        },
        a = $(".priceList span");
    $(".sliderIn").slider({
        max: 150,
        min: 0,
        step: 1,
        value: 0,
        range: "min",
        slide: function(f, b) {
            $(".inCount").val(b.value);
            var d = b.value * $(".procBox:first input:checked").val(),
                e = +$(".procBox:last input:checked").val();
            $("#inMon").text(d + " руб.");
            $("#outMon").text(e + " руб.");
            $("#sumMon").text(d + e + " руб.");
            a.removeClass("active");
            void 0 !== c[b.value] && a.eq(c[b.value]).addClass("active")
        },
        change: function(f,
            b) {
            $(".inCount").val(b.value);
            var d = b.value * $(".procBox:first input:checked").val(),
                e = +$(".procBox:last input:checked").val();
            $("#inMon").text(d + " руб.");
            $("#outMon").text(e + " руб.");
            $("#sumMon").text(d + e + " руб.");
            a.removeClass("active");
            void 0 !== c[b.value] && a.eq(c[b.value]).addClass("active")
        }
    });
    $(".sliderIn").slider("option", "value", 0);
    $(".calculator input").on({
        change: function() {
            var a = +$(".inCount").val() || 0;
            $(".inCount").val(a);
            $(".sliderIn").slider("option",
                "value", a)
        }
    });
    a.on({
        click: function() {
            var c = a.index(this);
            $(".sliderIn").slider("option", "value", 50 * c)
        }
    })
});
</script>
</body>

</html>

enable209 12.01.2016 12:45

Я правильно понял, что все то, что все позиции относящиеся к калькулятору, которые у меня есть, нужно заменить на те, которые вы прислали?

рони 12.01.2016 12:48

enable209,
и html и css тоже

enable209 12.01.2016 13:22

Вложений: 1
Перенес вроде все верно) но вот, что получилось (скрин во вложении) и еще, при переключении кнопки радио с одной позиции на другую, стоимость сразу не меняется, а начинает меняться только при передвижении ползунка(

рони 12.01.2016 13:46

enable209,
строка 154 пост 4 измените change на click
у вас куча ошибок в html, лишние теги или незакрытые собственные закрывающие теги типа <p/> вместо </p> , скрипты после body ... и т.д.

enable209 12.01.2016 13:51

Цитата:

Сообщение от рони (Сообщение 403396)
enable209,
строка 154 пост 4 измените change на click
у вас куча ошибок в html, лишние теги или незакрытые собственные закрывающие теги типа <p/> вместо </p> , скрипты после body ... и т.д.

Пожалуйста, помогите исправить, сам я уж точно не справлюсь(

change на click изменил, стало все ок) Спасибо)

рони 12.01.2016 14:06

enable209,
https://validator.w3.org/nu/?doc=htt...m-groups.ru%2F
убрать дубликаты name
Error: Duplicate attribute
<input type="text" name="tel" placeholder="Телефон" class="bbox picted tel" name="phone">
Self-closing syntax
исправить <p/>

Stray start tag
перенести скрипт - поставить перед боди а не после
Unclosed element и End tag и Stray end tag -- лишние или незакрытые или неоткрытые теги -- убрать переставить или закрыть , остальное не страшно.


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