开发者问题收集

Javascript 错误 - 页面加载时事件监听器错误

2022-05-09
153

我正在开发一个天气应用程序,页面加载后出现此错误 “未捕获 TypeError:无法读取 null 的属性‘addEventListener’”在第 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";
    }
});
2个回答

querySelector 使用 CSS 选择器在您的页面中查找元素, 您传递的选择器是 .form ,这意味着 查找带有名为 form 的类的元素 ,而这不会出现在您的 HTML 中的任何位置,因此正确的选择器是没有 . 的“form” 因为 . 表示类搜索

因此完整代码是

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

或者您可以将类添加到表单

<form class="form">
...

有关 CSS 选择器的更多详细信息,请参阅此 https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors

Mohammad Esam
2022-05-09

您的 html 中没有 .form 类

<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');
top16Dev
2022-05-09