ionic3+angular4中给DOM添加监听事件后报错:Uncaught (in promise): TypeError: Cannot read property 'addEventListen

本文探讨了JavaScript中常见的TypeError问题——无法读取属性'addEventListener'的情况及其原因,并提出了两种解决方案:一是对于Ionic应用,在ionViewDidEnter生命周期钩子中执行监听逻辑;二是针对原生JS,通过调整脚本位置、利用加载事件或jQuery库确保DOM加载完成后再执行监听代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Uncaught (in promise): TypeError: Cannot read property 'addEventListener' of null TypeError: Cannot read property 'addEventListener' of null at new MessagePage

原因:在页面还没有加载完成后这段监听的js代码已经执行,所以在执行这段代码的时候监听的DOM节点还没有加载创建,所以根本就找不到监听的元素。所以返回null。

解决方法:

等待页面完全加载完了再加载这段Js即可;

这个问题在ionic里面和原生js里面都会出现;

1.在ionic里面出现的解决方式为:

将这段js逻辑封装在ionViewDidEenter里面(不知道是什么的参照文章:http://blog.youkuaiyun.com/qq_34645412/article/details/76033045)

ionViewDidEnter() {
    var res = document.getElementById("bgpic");
    var ins = document.getElementById("IdCard");
    var resbg=document.getElementById("bgpicb");
    var insbg=document.getElementById("IdCardbg");
    if(typeof FileReader==="undefined"){
        res.innerHTML="很抱歉你的浏览器不支持FileReader";
        ins.setAttribute("disabled","disabled");
        resbg.innerHTML="很抱歉你的浏览器不支持FileReader"
        insbg.setAttribute("disabled","disabled")
    }else{
        ins.addEventListener('change',readerfile,false);
        insbg.addEventListener('change',readerfilebg,false);
    }
    function readerfile(){
        var file = this.files[0];
        console.log(file.size/1024);
        if (!/image\/\w+/.test(file.type)) {
            alert("文件必须为图片!");
            return false;
        }
        var reader = new FileReader();
        reader.readAsDataURL(file);
        reader.onload = function (e) {
            console.log(res);
            res.setAttribute('src',this.result);
        }
    }
    function readerfilebg(){
        var file = this.files[0];
        console.log(file.size/1024);
        if (!/image\/\w+/.test(file.type)) {
            alert("文件必须为图片!");
            return false;
        }
        var readerbg = new FileReader();
        readerbg.readAsDataURL(file);
        readerbg.onload = function (e) {
            console.log(resbg);
            var aa=this.result;
            console.log(aa);
            resbg.setAttribute('src',this.result);
        }
    }
}


2.在原生js中的解决方法:

     1.将脚本放在页面的底部。
     2.在加载事件中调用附加代码。
     3.使用jQuery库,它是DOM就绪事件。
什么是jQuery ready事件?
JavaScript提供了在页面呈现时执行代码的加载事件,但是直到所有资源(如图像)都被完全收到为止,才会触发该事件。 在大多数情况下,只要DOM层次结构完全构建,脚本就可以运行。 传递给.ready()的处理程序保证在DOM准备好后执行,所以这通常是附加所有其他事件处理程序的最佳位置...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

傻小胖

如果觉得不错就给点赏钱吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值