javascript - JS 输入按键事件 - 无法读取 null 的属性 'addEventListener'

标签 javascript html dom-events addeventlistener

我为我的网站创建了一个搜索功能,最初只是将其设置为 Form Element使用POST将变量发送到我的搜索页面。然而,这只会给我一个简单的 URL search.php 。因此,如果单击某些内容然后返回,则不会发布变量,因此不会再有搜索结果。

我想改进这一点,这样如果他们点击某些内容并返回,它将返回到 search.php?term=search%20term 的 URL。然后将其视为 GET变量,因此它将再次显示结果,并且可用于直接在 URL 栏中搜索某些内容。

(注意:我重写了规则,将 search.php?term=search%20term 更改为 search/search%20term 。我还有两个搜索栏,一个用于移动设备,一个用于桌面设备)

所以我将代码更改为以下内容:

function search(x){
    if(x=="search"){
        var search_term = document.getElementById('searchbox').value;
    }else if(x=="mini_search"){
        var search_term = document.getElementById('minisearchbox').value;
    }
    if(search_term != ""){
        window.location.href = "search/"+search_term;
    }
}
<div id="search">
    <input type="text" placeholder="Product Search" name="search" id="searchbox">
    <input type="image" src="media/search.png" class="search_button" name="search_button" onclick="search('search'); return false;">
</div>
<div id="minisearch">
    <input type="text" placeholder="Product Search" name="search" id="minisearchbox">
    <input type="image" src="media/search.png" class="search_button" name="search_button" onclick="search('mini_search'); return false;">
</div>

这按预期工作正常,但显然现在使用 return false声明当用户按enter时它不会搜索我希望他们能够做到这一点。

所以我尝试添加以下代码:

document.getElementById('searchbox').addEventListener('keypress', function(key){
    if(key.keycode==13){
        search(search);
    }
});
document.getElementById('minisearchbox').addEventListener('keypress', function(key){
    if(key.keycode==13){
        search(mini_search);
    }
});

但是,我现在收到错误消息 Uncaught TypeError: Cannot read property 'addEventListener' of null我不确定是什么原因造成的。

最佳答案

如果具有该 ID 的元素确实存在,则脚本可能会在 DOM 加载之前运行。

尝试将代码包装在:

document.addEventListener("DOMContentLoaded", function(event) { 
  // Your code here
});

关于javascript - JS 输入按键事件 - 无法读取 null 的属性 'addEventListener',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50924261/

相关文章:

javascript - 了解源映射

html - 如何将宽网页分成几页进行打印?

javascript - 将 "e"传递给新函数 - javascript

输入元素上的 Javascript 更改事件仅在失去焦点时触发

javascript - 如何保持 SELECT 元素的宽度小但选项灵活

javascript - Chartjs 条形图图例

jquery - 如何通过坐标将按钮放在图像上并在单击这些按钮时运行 jquery 函数

javascript - 黑莓网络 : onHardwareKey keyUp event?

javascript - 使用 jQuery 在服务器端操作 Wordpress 数据库

html - 在 Bootstrap 导航栏的中心对齐文本