Форма бронирования
Посетитель выбрал места. Теперь он бронирует их: вводит имя и email, а кинотеатр оставляет места за ним. Платить нужно будет в кассе, как сказано на странице. Добавьте в выбор мест форму под #summary:
<form id="booking-form" novalidate>
<p>
<label for="name">Имя</label>
<input id="name">
<span id="name-error" class="error"></span>
</p>
<p>
<label for="email">Email</label>
<input id="email" type="email">
<span id="email-error" class="error"></span>
</p>
<p id="seats-error" class="error"></p>
<button type="submit">Забронировать</button>
</form>
<p id="confirmation"></p>Как в мини-проекте «Форма регистрации», novalidate говорит браузеру не проверять email самому, потому что проверку делает ваш скрипт. А в style.css задайте .error красный цвет. Места не входят в форму, и это важно: button внутри формы отправляет форму при нажатии.
Проверки те же, что вы знаете из урока «События и формы»: не давайте странице загрузиться заново, обрезайте лишние пробелы в полях и показывайте каждую проблему рядом с её полем, все сразу. Одна проверка новая: бронирование без мест не имеет смысла.
Бронирование. Когда всё верно, храните бронирование в массиве bookings: объект с id сеанса, именем, email и местами, например:
{ showtimeId: 1, name: "Анна", email: "anna@example.com", seats: ["C6", "C7"] }С этого момента забронированные места считаются занятыми. Место занято, если оно есть в taken сеанса или в местах бронирования на тот же сеанс. Это подскажет функция с методом some():
function isTaken(seat) {
if (chosenShowtime.taken.includes(seat)) {
return true;
}
return bookings.some((booking) => booking.showtimeId === chosenShowtime.id && booking.seats.includes(seat));
}Используйте её в showSeats() вместо chosenShowtime.taken.includes(seat).
Задание
- 1
Добавьте форму в выбор мест. Когда её отправляют, страница не должна загружаться заново. Проверьте имя и email, оба без лишних пробелов по краям: если имя пустое, покажите в
#name-errorтекстВведите имя., а если в email нет@, покажите в#email-errorтекстВведите правильный адрес электронной почты.Когда поле заполнено верно, очищайте его сообщение. - 2
Если не выбрано ни одного места, показывайте в
#seats-errorтекстВыберите хотя бы одно место., а иначе очищайте его. - 3
Когда всё верно, добавьте бронирование в
bookingsи покажите в#confirmationтекстЗабронировано! Ваши места: C6, C7(с забронированными местами). Затем очистите выбор и оба поля и нарисуйте места заново: забронированные теперь заняты.