未捕获的类型错误:无法读取 null 的属性“addEventListener”(多种形式)

Posted

技术标签:

【中文标题】未捕获的类型错误:无法读取 null 的属性“addEventListener”(多种形式)【英文标题】:Uncaught TypeError: Cannot read property 'addEventListener' of null (multiple forms) 【发布时间】:2020-12-31 23:00:31 【问题描述】:

各位开发者您好,

我有一个简单的问题。我正在研究我的 javascript 技能,这显然不是最好的:)。我正在尝试使用tutorial 的giphy API 编写一个搜索框。在视频 5 之前,我的代码与教程中显示的代码一样 100% 工作,但现在(视频 6)它不再工作了。

我收到错误“Uncaught TypeError: Cannot read property 'addEventListener' of null”。我googled 很多,并尝试了我在这里找到的fixes,但他们没有处理我的代码:/ 有趣的是,我的代码正在处理codepen.io!因此,codepen 和我的本地网站之间的唯一区别是多个搜索表单和引导程序。所以我猜测问题是多个搜索表单,因为这行:

const searchGif = document.getElementById("search-gif");
const searchInput = document.getElementById("gif-search-string"); 
searchGif.addEventListener('submit', function(event)
   event.preventDefault();
   const query = searchInput.value;
   search(query);
)

但我想,因为我在执行其余的 javascript 代码之前通过 ID 获取了正确的表单,所以可以吗?所以我希望你能帮助我解决我的问题。就像我说的,我的 JS 不是很好,只是想变得越来越好

PS:通过 html 正文末尾的 script 标签加载我的脚本 PS2:这是我完整的 HTML 代码 -> index.php - timeline-gif.php

【问题讨论】:

如何将你的js加载到页面中?脚本标签?请将您的 html 标题添加到问题中。 @我的body标签结束 我很确定您的searchGif 是在创建/渲染元素本身之前分配的。要等待这种情况发生,请参阅:***.com/a/9899701/5243272 Codepen 自动包装用户的代码,这可能是它在那里工作的原因。 但这和我现在做的完全一样?首先:加载 HTML 然后加载 JS?我看不出有什么区别:( 【参考方案1】:

这是您“启动”代码的方式。加载!== 渲染(不是 100% 确定这些是正确的术语)。 尝试将其包装在一个自执行函数中:

(function() 
 // Put your code here - dom should be available
)();

【讨论】:

我已经在尝试这个了,因为它是链接在顶部主题中的帖子中的一个解决方案。但它不起作用:(我会得到 2 个错误,而不仅仅是一个。 同样的错误,但在 2 个不同的行上没有。 (首先像上面的示例和我关闭函数的行上的第二个错误(脚本结尾) 那么我认为您必须发布整个 html。否则很难复制。 index.php - timeline-gif.php

以上是关于未捕获的类型错误:无法读取 null 的属性“addEventListener”(多种形式)的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的类型错误:无法读取 null 的属性“getContext”

为啥我会收到此错误:未捕获的类型错误:无法读取 null 的属性 'classList'

未捕获的类型错误:在输入单击时无法读取 null 的属性“样式”

如何修复未捕获的类型错误:无法读取 null 的属性“值”

未捕获的类型错误:无法读取 null 的属性“innerHTML”

未捕获的类型错误:无法在方法中读取 null 的属性“classList”