20.11.2017, 18:37
|
Интересующийся
|
|
Регистрация: 30.09.2017
Сообщений: 27
|
|
Если 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.
У каждой комбинации свой результ.
|
|
20.11.2017, 19:07
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Леонид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 во втором списке
}
|
|
20.11.2017, 19:35
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,795
|
|
Осталось только "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?
|
|
20.11.2017, 20:07
|
Интересующийся
|
|
Регистрация: 30.09.2017
Сообщений: 27
|
|
Как привести скрипт примерно к такой конструкции:
var coll = {
'1000 руб' = ['100,1+0'];
'2000 руб' = ['200,1+0'];
'3000 руб' = ['100,2+0'];
};
И как вывести var coll в результ?
|
|
20.11.2017, 20:15
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Леонид777,
текст опций списка, это для удобного восприятия человеком, а их из значения, это для удобного употребления программной средой. У вас опции имеют значения от 1 до ..., и это будет удобно для языка. Зачем же описывать наборы не значениями опций, а их текстами?
И ответ вы хотите получать как 20, 40, ..., а описываете опять таки текст 100, 1+0, ... Зачем?
|
|
20.11.2017, 20:21
|
Интересующийся
|
|
Регистрация: 30.09.2017
Сообщений: 27
|
|
Это для наглядности. В скрипте, конечно, лучше значениями.
Тогда так:
var coll = {
'1000 руб' = ['1','1'];
'2000 руб' = ['2','1'];
'3000 руб' = ['3','1'];
};
И как вывести var coll в результ?
|
|
20.11.2017, 20:49
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Леонид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, но не проблема и без нее.
Последний раз редактировалось laimas, 20.11.2017 в 20:58.
|
|
20.11.2017, 21:03
|
Интересующийся
|
|
Регистрация: 30.09.2017
Сообщений: 27
|
|
А если без JQuery?
Как лучше?
|
|
20.11.2017, 21:11
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Леонид777
|
Как лучше?
|
Если ваш сайт использует jQuery, то и пишите на нем. Если нет и это вся задача, то проще и без него обойтись.
|
|
20.11.2017, 21:19
|
Интересующийся
|
|
Регистрация: 30.09.2017
Сообщений: 27
|
|
Примерно данную конструкцию я и хотел:
var coll = {
'1': {'1': 20, '2': 40, '3': 80},
'2': {'1': 50, '2': 60, '3': 90}
},
Только вопрос вывода по нажатию на кнопку... Как лучше сделать?
|
|
|
|