Выпадающие списки и флажки
Вместо того чтобы печатать, пользователь часто просто выбирает. Выпадающий список — это элемент select с элементом option для каждого варианта:
<select id="drink">
<option value="чай">Чай</option>
<option value="кофе" selected>Кофе</option>
<option value="сок">Сок</option>
</select>Текст между тегами видит пользователь, а атрибут value — это то, что получит ваш скрипт: value элемента select равно значению выбранного варианта. Когда страница загружается, это "кофе", потому что атрибут selected заранее выбирает свой вариант. Как и у текстового поля, значение всегда текстовое.
Флажок — это input с type="checkbox":
<input id="sugar" type="checkbox">
<label for="sugar">С сахаром</label>Элемент label — это текст, который относится к полю. Его атрибут for содержит id поля, поэтому нажатие на текст тоже отмечает флажок. Отмечен ли флажок, хранится в его свойстве checked: true или false. Не используйте здесь value: значение флажка — это текст "on", отмечен он или нет.
Когда пользователь выбирает другой вариант или отмечает флажок или снимает отметку, элемент получает событие change:
const drinkSelect = document.querySelector("#drink");
const sugarCheckbox = document.querySelector("#sugar");
const order = document.querySelector("#order");
function showOrder() {
if (sugarCheckbox.checked) {
order.textContent = `Ваш заказ: ${drinkSelect.value} с сахаром`;
} else {
order.textContent = `Ваш заказ: ${drinkSelect.value}`;
}
}
drinkSelect.addEventListener("change", showOrder);
sugarCheckbox.addEventListener("change", showOrder);Оба элемента запускают одну и ту же функцию, и она читает оба, поэтому заказ всегда соответствует выбранному, какой бы из элементов ни изменился. sugarCheckbox.checked — это уже true или false, так что оно само может быть условием.
Текстовые поля тоже получают change, но только когда пользователь закончил: когда он уходит из поля, текст в котором изменил, или нажимает в нём Enter. Чтобы реагировать, пока человек печатает, используйте input.
Задание
- 1
Напишите функцию
showPrice(), которая показывает вpriceTextцену выбранного размера, напримерЦена: 13 €для большой пиццы. Сделайте её обработчиком событияchangeуsizeSelect. - 2
Дополнительный сыр стоит 2 €: в
showPrice()прибавьте 2 к цене, еслиcheeseCheckboxотмечен. ЗначениеsizeSelect— это текст, поэтому сначала превратите его в число. СделайтеshowPrice()обработчиком событияchangeи уcheeseCheckbox. Большая пицца с дополнительным сыром тогда покажетЦена: 15 €.