Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Скрипт для вывода значений (https://javascript.ru/forum/misc/71398-skript-dlya-vyvoda-znachenijj.html)

Леонид777 20.11.2017 18:37

Если tirazh-tampo1 = 100, nanesenie-tampo1 = 1+0, то результ = 20
Если tirazh-tampo1 = 200, nanesenie-tampo1 = 2+0, то результ = 30
Если tirazh-tampo1 = 100, nanesenie-tampo1 = 2+0, то результ = 40.
Всего 34 вариации селектов:
1-ый селект - 17 значений, второй - 2 значения. 17*2 = 34.
У каждой комбинации свой результ.

laimas 20.11.2017 19:07

Леонид777,
мы знаем, что килограмм гвоздей стоит 100 руб., поэтому несложно узнать сумму за N килограмм = 100 * N. Также знаем, что есть коэффициент за размер гвоздей: 50 мм - 1, 80 мм - 1.2, 100 - 1.3, .... Умножив сумму за N на коэффициент получим результат.

Это расчет. У вас нет никакого расчета, есть что-то фиксированное, о котором известно только вам, ибо 100 + 1 никак не может быть 20, как и другое. Значит опишите эти комбинации объектом и выбирайте их по значениям выбранных списков:

var coll = {
    '1' : {'1': 20, '2': X, ...}, //при выборе 1 во втором списке
    '2' : {'1': 40, '2': X, ...}  //при выборе 2 во втором списке
}

Nexus 20.11.2017 19:35

Осталось только "c" заполнить (если это вообще будет работать)
<div class="calculator-tampo1"><br/><a class="calc-tampo1-block">Расчет стоимости тампо печати по стандартным поверхностям (зажигалки, ручки, флешки, брелоки из пластика)</a><br/><br/><br/><select class="tirazh-tampo1" id="tirazh-tampo1"><option selected></option><option value="1">100шт</option><option value="2">200шт</option><option value="3">300шт</option><option value="4">400шт</option><option value="5">500шт</option><option value="6">600шт</option><option value="7">700шт</option><option value="8">800шт</option><option value="9">900шт</option><option value="10">1000шт</option><option value="11">1500шт</option><option value="12">2000шт</option><option value="8">2500шт</option><option value="9">3000шт</option><option value="10">3500шт</option><option value="11">4000шт</option><option value="12">5000шт</option></select>-Тираж;<br/><br/><select class="nanesenie-tampo1" id="nanesenie-tampo1"><option selected></option><option value="1">1+0</option><option value="2">2+0</option></select>-Количество цветов нанесения;<br/><br/><button type="button"onclick="calc();">Рассчитать!</button><br/><br/><div class="paket-result" style="font-weight:bold" id="result"></div></div>
	  <script>
		var a = document.getElementById("tirazh-tampo1"),
			b = document.getElementById("nanesenie-tampo1"),
			c={
				'1_1':10,
				'1_2':30,
				'2_2':40,
			};
			
		[a,b].forEach(function(item){
			item.onchange=calc;
		});
		
		function calc(){
			document.getElementById("result").innerHTML = c[a.value+'_'+b.value]||0;
		};
		</script>

Вопрос по оформлению кода: зачем после каждой строки оставлять минимум 1 пустую строку?
Так читается лучше? Почему не 6?

Леонид777 20.11.2017 20:07

Как привести скрипт примерно к такой конструкции:

var coll = {
'1000 руб' = ['100,1+0'];
'2000 руб' = ['200,1+0'];
'3000 руб' = ['100,2+0'];


};

И как вывести var coll в результ?

laimas 20.11.2017 20:15

Леонид777,
текст опций списка, это для удобного восприятия человеком, а их из значения, это для удобного употребления программной средой. У вас опции имеют значения от 1 до ..., и это будет удобно для языка. Зачем же описывать наборы не значениями опций, а их текстами?

И ответ вы хотите получать как 20, 40, ..., а описываете опять таки текст 100, 1+0, ... Зачем?

Леонид777 20.11.2017 20:21

Это для наглядности. В скрипте, конечно, лучше значениями.


Тогда так:
var coll = {
'1000 руб' = ['1','1'];
'2000 руб' = ['2','1'];
'3000 руб' = ['3','1'];


};

И как вывести var coll в результ?

laimas 20.11.2017 20:49

Цитата:

Сообщение от Леонид777
Это для наглядности.

Второй пример "наглядности" еще более ужасен, чем первый. :)

Пусть при выборе в двух списках:
если во втором выбрано D, то при выборе в первом должно быть:
для A - 20
для B - 40
для С - 80
а если во втором выбрано E, тогда
для A - 50
для B - 60
для С - 90

Эти значения и описывает объект, свойствами которого являются значения опций списков, по которым они и получаются:

<html>
<head>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
    var coll = {
        '1': {'1': 20, '2': 40, '3': 80},
        '2': {'1': 50, '2': 60, '3': 90}     
    },
    slc = $('select').change(function() {
        $('#out').text(coll[slc.last().val()][slc.first().val()])    
    });
});
</script>
</head>
<body>
<select>
   <option value="1">A</option>
   <option value="2">B</option>
   <option value="3">C</option>
</select>

<select>
   <option value="1">D</option>
   <option value="2">E</option>
</select>
<div id="out">20</div> 
</body>
</html>


При этом по умолчанию первый и второй список имеет выбранные значения (первые опции), а значит результат этого выбора уже должен отображаться. Иначе нужно предлагать выбор.

Это на jQuery, но не проблема и без нее.

Леонид777 20.11.2017 21:03

А если без JQuery?
Как лучше?

laimas 20.11.2017 21:11

Цитата:

Сообщение от Леонид777
Как лучше?

Если ваш сайт использует jQuery, то и пишите на нем. Если нет и это вся задача, то проще и без него обойтись.

Леонид777 20.11.2017 21:19

Примерно данную конструкцию я и хотел:


var coll = {

'1': {'1': 20, '2': 40, '3': 80},

'2': {'1': 50, '2': 60, '3': 90}

},

Только вопрос вывода по нажатию на кнопку... Как лучше сделать?


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