Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 02.06.2019
Сообщений: 9

Массивы в javascript

07.09.2019, 23:14. Показов 648. Ответов 3
Метки html (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Я пишу калькулятор на js для сайта с динамическими select

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

Очень надеюсь на вашу помощь.
Заранее спасибо!


HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<select name="type" id="type">
  <option value="ptp" selected>Подготовка технического плана</option>
  <option value="mzh">Межевание</option>
  <option value="dpu">Дополнительные услуги</option>
  <option value="tps">Топографическая съёмка</option>
</select>
<select name="service" id="service" value="">
</select>
<DIV >Площадь (м.кв)</DIV>
<input type="number" value="" id="square">
 
<DIV >Кол-во помещений</DIV>
<input type="number" value="" id="object">
 
<button onclick="rez();"></button>
<DIV id="total"></DIV>
 
<script type="text/javascript">
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
var services = {
        ptp:["Подготовка технического плана квартиры", "Подготовка технического плана нежилого помещения (части здания, части помещения)","Подготовка технического плана на несколько нежилых помещений, частей помещений, частей здания (офисные центры, торговые центры)","Подготовка технического плана ИЖС, дачного дома, гаража и т.д.","Подготовка технического плана нежилого здания","Подготовка технического плана линейного сооружения или Карты (плана) на зону с особыми условиями использования", "Подготовка технического плана многоквартирного дома","Выполнение запроса о предоставлении разрешительных документов", " Подготовка акта обследования"],
        mzh:["Подготовка межевого плана","Согласование границ","Подготовка межевого плана при*разделе участка","Подготовка межевого плана при*объединении участков","формирование части участка", "Подготовка схемы границ на КПТ","Вынос точек в натуру"],
        dpu:["получение выписки ЕГРН", "Подача документов для государственного кадастрового учёта и (или) государственной регистрации прав","Утверждение схемы границ на КПТ в  ДГИ г. Москвы."],
        tps:["Топографическая съёмка в Москве","Топографическая съёмка в Московской области","Согласование топографической съёмки в эксплуатирующих организациях","Подготовка ситуационного плана в масштабе 1:2000-1:10000"]
};
 
 
 
var type = document.getElementById("type");
var service = document.querySelector("#service");
window.onload = selectType;
type.onchange = selectType;
 
function selectType(ev){
  service.innerHTML = "";
  var c = this.value || "ptp", o;
  for(let i = 0; i < services[c].length; i++){
    o = new Option(services[c][i],i,false,false);
    service.add(o);
  };
}
 
 
 
function rez(){
    service1 = document.getElementById("service").value;
    square =  document.getElementById("square").value;
    object = document.getElementById("object").value;
    square = parseInt(square);
    object = parseInt(object);
    let cost = 0;
    if (service1 == "0" && square<=100){
        cost=15000;
    }
    if (service1 == "0" && square>100){
        cost=square*50+9000;
    }
 
    else if (service1 == "1" && square<=200){
        cost=20000;
    }
    else if (service1 == "1" && square>200 && square<=500){
        cost=(square-200)*50+20000;
    }
 
    else if (service1 == "1" && square>500 && square<=1000){
        cost=(square-500)*40+35000;
    }
 
    else if (service1 == "1" && square>1000){
        cost=(square-1000)*30+55000;
    }
 
    else if (service1 == "2" && object<=10){
        cost=object*6000;
    }
 
    else if (service1 == "2" && object>10 && object<=50){
        cost=(object)-10*5000+60000;
    }
 
    else if (service1 == "2" && object>50){
        cost=(object)-50*3000+260000;
    }
 
 
 
     
    document.getElementById('total').innerHTML = "Стоимость равна:"+cost+"p.";
}
 
</script>
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.09.2019, 23:14
Ответы с готовыми решениями:

Массивы в javascript
Заданный массив из n элементов. Построить вектор из элементов исходного массива с четными индексами. ВОТ МОЙ КОД! &lt;html&gt; ...

Массивы в javascript
Существует ли ограничение на размер массивов в javascript? На сайте lynda.com приводят пример работы с большими таблицами. Чтобы не...

Массивы и JavaScript
Такая вот задачка, я её почти решила, но не могу разобраться в одном месте: &lt;script language=&quot;JavaScript&quot;&gt; function...

3
 Аватар для atanov
640 / 481 / 172
Регистрация: 26.05.2016
Сообщений: 2,674
08.09.2019, 15:05
Illorion, даа.... ужос
Для начала - посмотрите консоль.
Далее, объясните, что Вы хотте в 12 и 13 строках получить.
Что Вы хотите функции selectType в качестве аргумента ev (а это событие, но работать в Вашем примере не будет) и главное для чего предаёте?
Ну и вишенка на тортике - столько if'ов в функции rez(), что свихнуться можно. А главное зачем, сами потом запутаетесь.
Разбейте первое условие для service1 на case'ы, а потом дробите if'ами интервалы для square и object:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
switch(service1)
{
   case '0':
         //условие для ....
   break;
   case '1':
         //условие для ....
   break;
   case '2':
         //условие для ....
   break;
}
Хотя у Вас скорее всего неправильно построена логика.
Вдогонку - у Вас куча цифирей - констант, лучше их обозначьте в скрипте, для удобства изменений.
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
08.09.2019, 16:32
Illorion, atanov, общее правило - если условий больше пяти,
то скорее всего надо удалить if и switch и написать нормальную обработку данных в массиве.

Все бизнес-правила обычно прекрасно описываются в таблице БД.
Вывод: нам никто не мешает таким же макаром затолкать бизнес-правила в массив JS.
1
 Аватар для atanov
640 / 481 / 172
Регистрация: 26.05.2016
Сообщений: 2,674
08.09.2019, 18:18
Цитата Сообщение от amr-now Посмотреть сообщение
общее правило - если условий больше пяти,
то скорее всего надо удалить if и switch и написать нормальную обработку данных в массиве.
всеми конечностями ЗА.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.09.2019, 18:18
Помогаю со студенческими работами здесь

JavaScript и ассоциативные массивы
Поддерживает ли JavaScript асоциативные массивы?..

массивы в HTML с использованием JavaScript
1. Найти количество простых чисел в интервале от a до b. 2. Дан массив A, состоящий из n элементов. Удалить все четные элементы. 3....

массивы в HTML с использованием JavaScript
1)Дан массив A, состоящий из n элементов. Удалить из массива последний четный элемент. Вывести новый массив. 2) Дан массив A, состоящий...

Массивы в html с подключением javascript
1. Дан массив A, состоящий из n элементов. Удалить элементы с k1-го по k2-ой, где k1 и k2 вводятся с клавиатуры. Вывести новый массив. 2....

Массивы в javascript - неужели всё так банально?
Народ, неужели в javascript большинство нужных функций у массивов нет? Наример: для того чтобы узнать какое значение в массиве самое...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru