为什么javascript代码无法读取到函数类型( Uncaught TypeError)?
大家讲道理
大家讲道理 2017-04-11 09:44:07
[JavaScript讨论组]

绑定了一个事件addEventListener,但是调试的时候报错,显示Uncaught TypeError: Cannot read property 'addEventListener' of null,类型错误。不知道错在哪里,也不知道如何定位。
报错的是如下代码段:

function init() {

    // 在这下面给add-btn绑定一个点击事件,点击时触发addBtnHandle函数
    document.getElementById("add-btn").addEventListener("click", addBtnHandle)
    // 想办法给aqi-table中的所有删除按钮绑定事件,触发delBtnHandle函数
    document.getElementById("aqi-table").addEventListener("click", function(event){
        if(event.target.nodeName.toLowerCase() === 'button') delBtnHandle.call(null, event.target.dataset.city);
    })
}

全部的代码地址:http://louislee0229.github.io/louisIFE/task16/task16

请帮忙解决,更重要的我以后应该如何独立的调试代码排错呢?谢谢!

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(2)
高洛峰

你调用js文件时,DOM还没有渲染完。
你把页面内引用的js放到最后就可以了。
或者js里面用window.onload()

至于错误调试,在调试工具也找不到错误的话,试着将你的错误代码进一步分解。

var add-btn = document.getElementById("add-btn");
if(add-btn) {
    addEventListener("click", addBtnHandle);
}
迷茫

你的这段代码在head中定义并立即执行,也就是下面body的元素都还没有生成,所以document.getElementById("add-btn")返回的都是null。

解决问题你需要,

  1. 要不把script放在body末尾

  2. 要不把把执行放在onload事件中

以后如何解决自己独立调试:
看懂报错信息,这里明显的告诉你了调用addEventListener的对象为null,那么肯定就是两个getElementById找不到元素,然后去看为什么找不到。因为这里你是链式调用,所以为了找出中间是哪步出了错,你可以把代码段(如:document.getElementById("add-btn"))直接copy出来放在console中跑跑看结果。

这里你需要了解到最基础的js和dom加载和执行的顺序问题,属于常识。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号