Ошибка Javascript — ошибка прослушивателя событий при загрузке страницы

я работаю над погодным приложением, и я получаю эту ошибку после загрузки страницы «Uncaught TypeError: невозможно прочитать свойство addEventListener со значением null» в строке 36.

вот фрагмент кода для Html:

<div class = "weather - app">
          <div class = "panel">
            <form >
                <input type = "text"
                       class = "search"  
                       placeholder = "Search Location .."/>
                <button type = "submit"
                        class = "submit">
                    <i class = "fa fa-search"></i>
                </button>
            </form>
            <ul class = "cities">
                <li class = "city">Paris</li>
                <li class = "city">Las Vegas</li>
                <li class = "city">Japan</li>
                <li class = "city">Sfax</li>
            </ul>
            
        </div>
    </div>
    <script src = "main.js" ></script>`

................................................. ...........................

и для main.js:


const app = document.querySelector('.weather-app');
const form = document.querySelector('.form');
const search = document.querySelector('.search');
const btn = document.querySelector('.submit');
const cities = document.querySelectorAll('.city');



//add sumbit event to the form
form.addEventListener('submit', (e) => {
    e.preventDefault();

    //if input field(search bar) empty throw an alert
    if (search.value.length == 0) {
        alert('Please type in a City name !');
    } else {
        //change default city name to the one written in search bar 
        cityInput = search.value;
        search.value = "";
        app.style.opacity = "0";
    }
});

добавьте свойство класса в форму в html: <form class = "form">

Oleg 09.05.2022 14:08
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
21
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

querySelector использует селекторы CSS, чтобы найти элемент на вашей странице, селектор, который вы передали, это .form, что означает найти элемент с классом form, и он нигде не отображается в вашем HTML, поэтому правильный селектор — это «форма» без . так как . представляет поиск класса

так что полный код

const form = document.querySelector('form');

или вы можете добавить класс в свою форму

<form class = "form">
...

для получения более подробной информации о селекторах CSS см. https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors

У вас нет класса .form в вашем html

<div class = "weather - app">
          <div class = "panel">
            <form >
                <input type = "text"
                       class = "search"  
                       placeholder = "Search Location .."/>
                <button type = "submit"
                        class = "submit">
                    <i class = "fa fa-search"></i>
                </button>
            </form>
            <ul class = "cities">
                <li class = "city">Paris</li>
                <li class = "city">Las Vegas</li>
                <li class = "city">Japan</li>
                <li class = "city">Sfax</li>
            </ul>
            
        </div>
    </div>
    <script src = "main.js" ></script>

Удалить . если вы хотите запросить DOM для тега

const form = document.querySelector('.form');

Другие вопросы по теме