Информация о файлах cookie на этой странице

Наш сайт использует файлы cookie, чтобы обеспечивать его работу, а также собирать и анализировать данные о работе и использовании сайта. Политика конфиденциальности

  • Курсы
    • Discord
    • Twitter
    • Linkedin
    • Facebook
    • Instagram
  • Тарифы
  • English
  • Čeština
  • Deutsch
  • Русский
ВойтиНачать бесплатно
  • Курсы
  • Тарифы

Сообщество

Войти
  
  • Курсы
    • Discord
    • Twitter
    • Linkedin
    • Facebook
    • Instagram
  • Тарифы
  • English
  • Čeština
  • Deutsch
  • Русский
ВойтиНачать бесплатно
  • Курсы
  • Тарифы

Сообщество

Войти

Форма бронирования

Посетитель выбрал места. Теперь он бронирует их: вводит имя и 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. 1

    Добавьте форму в выбор мест. Когда её отправляют, страница не должна загружаться заново. Проверьте имя и email, оба без лишних пробелов по краям: если имя пустое, покажите в #name-error текст Введите имя., а если в email нет @, покажите в #email-error текст Введите правильный адрес электронной почты. Когда поле заполнено верно, очищайте его сообщение.

  2. 2

    Если не выбрано ни одного места, показывайте в #seats-error текст Выберите хотя бы одно место., а иначе очищайте его.

  3. 3

    Когда всё верно, добавьте бронирование в bookings и покажите в #confirmation текст Забронировано! Ваши места: C6, C7 (с забронированными местами). Затем очистите выбор и оба поля и нарисуйте места заново: забронированные теперь заняты.

Назад

6/8

  1. 1. Расписание из файла
  2. 2. Выбор дня
  3. 3. Выбор сеанса
  4. 4. Места в зале
  5. 5. Выбор мест
  6. 6. Форма бронирования
  7. 7. Сохранение бронирований
  8. 8. Ваши билеты
Далее

Начните программировать бесплатно

Регистрируясь, вы принимаете Условия использования и Политику конфиденциальности.

Или зарегистрируйтесь через: