@Agusha205
Веб-верстальщик

Событие Change нужно сделать зависимые списки, и при выборе последнего должна выдаваться разная цена, как это сделать?

Мне нужно сделать как-бы зависимые списки, и что бы при выборе площади выдавало стоимости разные

<div class="select-locations select">
                                   <label for="location" class="location-label">Расположение</label>
                                    <select class="select-street select-location" name="select-street" id="select-street" required>
                                        <option value="sunny" selected="selected">ул.Солнечная</option>
                                        <option value="kobceva">ул.Кобцева</option>
                                        <option value="gagarina">ул.Гагарина</option>
                                    </select>
                                </div>
                                <br>
                                <div class="amount select area" id="input-select">
                                    <label for="amount">Количество комнат</label>
                                        <select class="select-room select-layout" name="select-room" id="select-room" required>
                                            <option value="1">1</option>
                                            <option value="2">2</option>
                                            <option value="3">3</option>
                                        </select>                       
                                </div>
                                <div class="layout-flat select">
                                    <label for="layout">Общая площадь</label>
                                    <select class="select-area area-block" name="select-area2" id="select-area" required>
                                        
                                    </select>
                               <h3 class="last-price select">Цена <span class="price"></span></h3>
  • Вопрос задан
  • 91 просмотр
Пригласить эксперта
Ответы на вопрос 1
@lolzqq
HTML,CSS,JS,PHP
Не знаю, должна ли быть связь между кол-вом комнат и площадью, при выборе именно площади - стоимости выдаёт разные, соответственно придуманным мной тарифам. Количество комнат в этом примере не учитывается.

Код закомментировал, где в него влез и что-то переписал/добавил
<!doctype html>
<html lang="ru">
<head>
  <meta charset="utf-8" />
  <title></title>

</head>

<body>
<div class="select-locations select">
   <label for="location" class="location-label">Расположение</label>
	<select class="select-street select-location" name="select-street" id="select-street" required>
		<option value="sunny" selected="selected">ул.Солнечная</option>
		<option value="kobceva">ул.Кобцева</option>
		<option value="gagarina">ул.Гагарина</option>
	</select>
</div>
<br>
<div class="amount select area" id="input-select">
	<label for="amount">Количество комнат</label>
		<select class="select-room select-layout" name="select-room" id="select-room" required>
			<option value="1">1</option>
			<option value="2">2</option>
			<option value="3">3</option>
		</select>                       
</div>
<div class="layout-flat select">
	<label for="layout">Общая площадь</label>
	<select class="select-area area-block" name="select-area2" id="select-area" required>
		
	</select>
<h3 class="last-price select">Цена <span class="price"></span></h3>
</body>
<script>
function selectStreet(room,rooms){
  room.innerHTML = "";
  var c = this.value || "sunny", o;
  for(let i = 0; i < rooms[c].length; i++){
    o = new Option(rooms[c][i],i,false,false);
    room.add(o);
  };
}
function selectRoom(area,areas){
  area.innerHTML = "";
  var c = this.value || 1, o;
  for(let i = 0; i < areas[c].length; i++){
	  // эту строчку модернизировал, чтобы в атрибут value выводилась площадь квартиры
    o = new Option(areas[c][i],areas[c][i],false,false); 
    area.add(o);
  };
}
function showPrice(tariffs,street,area){
	// модифицировал вашу функцию
	const selectElement = document.querySelector('.select-area');
	
	
	selectElement.addEventListener('change', (event) => {
		var street_option=street.value; // получаем значение улицы
		var area_option=area.value; // получаем площадь квартиры
		var tariff=tariffs[street_option]; // выбираем тариф
		var cost=area_option*tariff; // перемножаем площадь квартиры на тариф
	  
	  const result = document.querySelector('.price');
	  // вставляем вычисленную цену в '.price'
	  result.textContent = cost;
	});	
}

document.addEventListener("DOMContentLoaded", function(){
	var	rooms = {
	  sunny: ["1", "2", "3"],
	  kobceva: ["1", "2", "3"],
	  gagarina: ["1", "2"]
	};
	var	areas = {
	  1: ["41.27", "46.96", "48.31"],
	  2: ["68.33", "69.64", "70.97", "72.39"],
	  3: ["67.31", "67.60","86.23", "94.54"]
	};
	// поскольку вы не указали, какой будет алгоритм расчёта цен,
	// я решил, что это будут тарифы, зависящие от улицы
        // при желании, можете усложнить структуру и прописать свою цену для каждого набора квартир
        // тогда и в функции showPrice() нужно будет побольше факторов учитывать
        // в строке var tariff=tariffs[street_option]; // выбираем тариф - навигация будет иметь больше [ ] скобок
	var tariffs = {
		sunny: 100, // для улицы sunny квадратный метр стоит 100 ед.
		kobceva: 200, // для улицы kobceva квадратный метр стоит 200 ед.
		gagarina: 300 // для улицы gagarina квадратный метр стоит 300 ед.
	}
	var	street = document.getElementById("select-street");
	var	room = document.querySelector("#select-room");
	var	area = document.querySelector("#select-area");
	selectStreet(room,rooms);
	selectRoom(area,areas);
	
	street.addEventListener('change',selectStreet(room,rooms))
	room.addEventListener('change',selectRoom(area,areas))
	
	showPrice(tariffs,street,area);

	
})

</script>
</html>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы