Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.10.2017, 09:02
Профессор
Отправить личное сообщение для the_little Посмотреть профиль Найти все сообщения от the_little
 
Регистрация: 25.09.2017
Сообщений: 186

Как правильно перебрать условия из разных таблиц?
Всем привет!
Исходные данные. Есть несколько таблиц.
Таблица 1. Стоимость пленки.
--------------дешево средний дорогой
маленький
средний
большой

Таблица 2. Ламповый проектор.
---------------ТИП 1 ТИП 2 ТИП3
маленький
средний
большой

Таблица 3. Лазерный проектор.
---------------ТИП 1 ТИП 2 ТИП3
маленький
средний
большой

Таблица 4. Работы
---------------ТИП 1 ТИП 2 ТИП3
маленький
средний
большой

Далее в HTML:
РАДИОБАТТОН с бюджетом
СЕЛЕКТ с размером
После выбора значения в СЕЛЕКТе с размером открывается
СЕЛЕКТ выбора лампового проектора
После выбора значения в СЕЛЕКТе с типом лампового проектора открывается
РАДИОБАТТОН использовать лазерный проектор ДА НЕТ
Если НЕТ - то ничего не происходит
Если ДА - то из Таблицы 3 берется соответсвующее значение.
Ну и там дальше еще аналогичные таблицы, значения которых зависят от размера и типа проектора.

Как сейчас это делаю я. Перебираю IF все возможные варианты при каждом новом СЕЛЕКТе. Это выглядит очень громоздко, и чувствую что есть способ более правильный... Я пытался задать при втором переборе (РАЗМЕР + ТИП ПРОЕКТОРА) переменную EX, которая потом сокращала запись, но не считает...

Я уже думал может можно какими-то массивами сделать, но не понимаю как потом что с ними делать...

function check() {
    // Определяем выбранный бюджет
    var inp = document.getElementsByName('budjet');
    for (var i = 0; i < inp.length; i++) {
        if (inp[i].type == "radio" && inp[i].checked) {
            var b = inp[i].value;
        }
    }

    // Определяем выбранный размер
    var selsize = document.getElementById("size"); // Получаем наш список
	var size = selsize.options[selsize.selectedIndex].value;

    // Определяем выбранный тип проектора
    var selprojsm = document.getElementById("proj_sm"); // Получаем наш список
    var psmt = selprojsm.options[selprojsm.selectedIndex].value;

    var selprojmid = document.getElementById("proj_mid"); // Получаем наш список
    var pmidt = selprojmid.options[selprojmid.selectedIndex].value;

    var selprojlg = document.getElementById("proj_lg"); // Получаем наш список
    var plgt = selprojlg.options[selprojlg.selectedIndex].value;

    if ( size == 1 && b == 1 ) {
    	var sp = 3500; // Бюджет = ДЕШЕВО, Размер 1500х1000 мм
    } 
    if ( size == 1 && b == 2 ) {
    	var sp = 11000; // Бюджет = СРЕДНИЙ, Размер 1500х1000 мм
    } 
    if ( size == 1 && b == 3 ) {
    	var sp = 90000; // Бюджет = ПРЕМИУМ, Размер 1500х1000 мм
    } 
    if ( size == 2 && b == 1 ) {
    	var sp = 7000; // Бюджет = ДЕШЕВО, Размер 2000х1500 мм
    } 
    if ( size == 2 && b == 2 ) {
    	var sp = 22000; // Бюджет = СРЕДНИЙ, Размер 2000х1500 мм
    } 
    if ( size == 2 && b == 3 ) {
    	var sp = 120000; // Бюджет = ПРЕМИУМ, Размер 2000х1500 мм
    } 
    if ( size == 3 && b == 1 ) {
    	var sp = 15000; // Бюджет = ДЕШЕВО, Размер 3000х2200 мм
    } 
    if ( size == 3 && b == 2 ) {
    	var sp = 44000; // Бюджет = СРЕДНИЙ, Размер 3000х2200 мм
    } 
    if ( size == 3 && b == 3 ) {
    	var sp = 360000; // Бюджет = ПРЕМИУМ, Размер 3000х2200 мм
    }

    // Определяем стоимость проектора
    if ( size == 1 && psmt == 1 ) {
        var pp = 35000; // Размер 1500х1000 мм, Ночь
        var ex = 44;
    } 
    if ( size == 1 && psmt == 2 ) {
        var pp = 80000; // Размер 1500х1000 мм, Пасмурный
        var ex = 54;
    } 
    if ( size == 1 && psmt == 3 ) {
        var pp = 130000; // Размер 1500х1000 мм, День
        var ex = 64;
    } 
    if ( size == 2 && pmidt == 1 ) {
        var pp = 80000; // Размер 2000х1500 мм, Ночь
        var ex = 45;
    } 
    if ( size == 2 && pmidt == 2 ) {
        var pp = 160000; // Размер 2000х1500 мм, Пасмурный
        var ex = 55;
    } 
    if ( size == 2 && pmidt == 3 ) {
        var pp = 250000; // Размер 2000х1500 мм, День
        var ex = 65;
    } 
    if ( size == 3 && plgt == 1 ) {
        var pp = 130000; // Размер 3000х2200 мм, Ночь
        var ex = 46;
    } 
    if ( size == 3 && plgt == 2 ) {
        var pp = 250000; // Размер 3000х2200 мм, Пасмурный
        var ex = 56;
    } 
    if ( size == 3 && plgt == 3 ) {
        var pp = 370000; // Размер 3000х2200 мм, День
        var ex = 66;
    }

    // Скрываем и показываем выбор проектора в соответсвии с выбранным размером витрины
    var el = document.getElementById("projector");
    var psm = document.getElementById("proj_small");
    var pmid = document.getElementById("proj_middle");
    var plg = document.getElementById("proj_large");
    var plaz = document.getElementById("lazer-krep");

    if ( size == 1) {
        el.classList.remove("hidden");
        el.classList.add("visible");
        psm.classList.remove("hidden");
        psm.classList.add("visible");
        pmid.classList.add("hidden");
        pmid.classList.remove("visible");
        plg.classList.add("hidden");
        plg.classList.remove("visible");
    }
    if ( size == 2) {
        el.classList.remove("hidden");
        el.classList.add("visible");
        psm.classList.remove("visible");
        psm.classList.add("hidden");
        pmid.classList.add("visible");
        pmid.classList.remove("hidden");
        plg.classList.add("hidden");
        plg.classList.remove("visible");
    }
    if ( size == 3) {
        el.classList.remove("hidden");
        el.classList.add("visible");
        psm.classList.remove("visible");
        psm.classList.add("hidden");
        pmid.classList.add("hidden");
        pmid.classList.remove("visible");
        plg.classList.add("visible");
        plg.classList.remove("hidden");
    }
    if ( size != 1 && size != 2 && size != 3) {
        plaz.classList.remove("visible");
        plaz.classList.add("hidden");
        el.classList.remove("visible");
        el.classList.add("hidden");
        psm.classList.remove("visible");
        psm.classList.add("hidden");
        pmid.classList.add("hidden");
        pmid.classList.remove("visible");
        plg.classList.add("hidden");
        plg.classList.remove("visible");
        sp = 0;
        pp = 0;
    }

    if (psmt == 1 && size == 1 || psmt == 2 && size == 1 || psmt == 3 && size == 1 || pmidt == 1 && size == 2 || pmidt == 2 && size == 2 || pmidt == 3 && size == 2 || plgt == 1 && size == 3 || plgt == 2 && size == 3 || plgt == 3 && size == 3) {
        plaz.classList.add("visible");
        plaz.classList.remove("hidden");
    }

    if ( psmt == 0 && pmidt == 0 && plgt == 0 ) {
        plaz.classList.add("hidden");
        plaz.classList.remove("visible");
        sp = 0;
        pp = 0;
    }

    // Определяем выбран ли лазерный проектор
    var laz = document.getElementsByName('lazer');
    for (var i = 0; i < laz.length; i++) {
        if (laz[i].type == "radio" && laz[i].checked) {
            var l = laz[i].value;
        }
    }

    // Определяем выбранный размер
 //   var sellaz = document.getElementById("lazertype"); // Получаем наш список
   // var lazt = sellaz.options[sellaz.selectedIndex].value;

    if ( l == 1 ) {
        if ( ex == 44 || ex == 45 ) {
            pp = 200000;
        }
        if ( ex == 46 ) {
            pp = 400000;
        }
        if ( ex == 54 || ex == 55 ) {
            pp = 400000;
        }
        if ( ex == 56 ) {
            pp = 800000;
        }
        if ( ex == 64 ) {
            pp = 800000;
        }
        if ( ex == 65 ) {
            pp = 1300000;
        }
        if ( ex == 66 ) {
            pp = 1600000;
        }
    } else {
        pp = 0;
    }
    
    var summ = sp + pp;
    document.getElementById("price_oborud").innerHTML = summ;
    alert(pp);
}

Последний раз редактировалось the_little, 27.10.2017 в 09:04.
Ответить с цитированием
  #2 (permalink)  
Старый 27.10.2017, 09:20
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от the_little
Я уже думал может можно какими-то массивами сделать, но не понимаю как потом что с ними делать...
Именно так и нужно. Обращаться нужно потом как к элементам массива.
Ответить с цитированием
  #3 (permalink)  
Старый 27.10.2017, 09:30
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от the_little Посмотреть сообщение
if ( size == 1 && b == 1 ) {
    	var sp = 3500; // Бюджет = ДЕШЕВО, Размер 1500х1000 мм
    } 
    if ( size == 1 && b == 2 ) {
    	var sp = 11000; // Бюджет = СРЕДНИЙ, Размер 1500х1000 мм
    } 
    if ( size == 1 && b == 3 ) {
    	var sp = 90000; // Бюджет = ПРЕМИУМ, Размер 1500х1000 мм
    } 
    if ( size == 2 && b == 1 ) {
    	var sp = 7000; // Бюджет = ДЕШЕВО, Размер 2000х1500 мм
    } 
    if ( size == 2 && b == 2 ) {
    	var sp = 22000; // Бюджет = СРЕДНИЙ, Размер 2000х1500 мм
    } 
    if ( size == 2 && b == 3 ) {
    	var sp = 120000; // Бюджет = ПРЕМИУМ, Размер 2000х1500 мм
    }
Вместо этого используй массив массивов
var arr=[
	[
		3500,
		11000,
		90000,
	],
		7000,
		22000,
		120000
	]
];
var sp=arr[size-1, b-1];

И т.д. и т.п...
Ответить с цитированием
  #4 (permalink)  
Старый 27.10.2017, 11:28
Профессор
Отправить личное сообщение для the_little Посмотреть профиль Найти все сообщения от the_little
 
Регистрация: 25.09.2017
Сообщений: 186

var arr=[
	[
		3500,
		11000,
		90000,
	],
		7000,
		22000,
		120000
	]
];
var sp=arr[size-1, b-1];

arr[size-1, b-1] - что такое? Какое значение получается? 3500 должно быть...
Ответить с цитированием
  #5 (permalink)  
Старый 27.10.2017, 12:10
Профессор
Отправить личное сообщение для the_little Посмотреть профиль Найти все сообщения от the_little
 
Регистрация: 25.09.2017
Сообщений: 186

Я понимаю, что мне можно сделать массив из трех массивов.
например
// 3 в ширину 3 в высоту
// каждый подмассив - колонка
var matrix = [ [1,2,3], [4,5,6], [7,8,9] ]
alert(matrix[1][1])  // 5

Но как мне задать условие, при котором нужно переменной sp присвоить значение из этого массива.
Ответить с цитированием
  #6 (permalink)  
Старый 27.10.2017, 12:21
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

the_little,
Сообщение от the_little
как мне задать условие, при котором нужно переменной sp присвоить значение из этого массива
Условие как раз и не нужно: вы имеете значения size и p и по ним берете нужное значение из массива.
Сообщение от ksa
var sp=arr[size-1, b-1];
Ответить с цитированием
  #7 (permalink)  
Старый 27.10.2017, 12:35
Профессор
Отправить личное сообщение для the_little Посмотреть профиль Найти все сообщения от the_little
 
Регистрация: 25.09.2017
Сообщений: 186

Сообщение от Dilettante_Pro Посмотреть сообщение
the_little,

Условие как раз и не нужно: вы имеете значения size и p и по ним берете нужное значение из массива.
Не понимаю.
var size принимает значение 1,2,3
var b принимает значение 1,2,3
Всего 9 комбинаций

Есть массив

var arr=[
[ 3500, 11000, 90000],
[ 7000, 22000, 120000],
[ 15000, 44000, 360000]
];

Допустим у меня size=3 и b=2 это получается 44000 должно быть.
А если size изменится на 1, то это будет 11000

значение из массива нужно подставить в переменную var = sp

Перебор какой-то должен быть, или что я не понимаю.

Я снова вижу только то, что и раньше делал.
Если size=3 и b=2 то var sp = arr[3][2]
Ответить с цитированием
  #8 (permalink)  
Старый 27.10.2017, 12:41
Профессор
Отправить личное сообщение для the_little Посмотреть профиль Найти все сообщения от the_little
 
Регистрация: 25.09.2017
Сообщений: 186

О, а так нельзя написать
var sp = arr[size][b]

Получается он будет сам перебирать элементы массива в зависимости от размера и бюджета...

ВОзможно это
var sp=arr[size-1, b-1];
то же самое, просто я такой вид записи не пойму...

Я на сколько понял из массива с массивами вызывается значение парой [][]
Ответить с цитированием
  #9 (permalink)  
Старый 27.10.2017, 12:43
Профессор
Отправить личное сообщение для the_little Посмотреть профиль Найти все сообщения от the_little
 
Регистрация: 25.09.2017
Сообщений: 186

так, кажется дошло.
тут [size-1, b-1]
-1 стоит, поскольку у меня значения 1-3, а массив с 0 начинается?
только все равно не понятно, почему в одних скобках квадратных...
Ответить с цитированием
  #10 (permalink)  
Старый 27.10.2017, 12:51
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

the_little,
Насчет квадратных скобок вы абсолютно правы
var arr=[
	[
		3500,
		11000,
		90000,
	], [
		7000,
		22000,
		120000
	]
],
size = 1,
b = 3;
var sp=arr[size-1][ b-1];
alert(sp);

Последний раз редактировалось Dilettante_Pro, 27.10.2017 в 13:06.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Пасоны, как правильно парсить параметры? megaupload Оффтопик 15 05.05.2013 14:44
filter(this,this) как правильно сделать? Smip jQuery 5 23.02.2013 03:07
Как правильно прицепить обработку события slowklg Events/DOM/Window 6 15.03.2012 16:20
Как правильно очистить maxlength в input? Маэстро Events/DOM/Window 10 22.06.2011 18:14