问答详情
源自:2-4 IE事件处理程序及跨浏览器解决

看完这一节,自己写了一个DOM二级事件函数,但老是报错 :obj is null !

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script type="text/javascript">
        
        var btn = document.getElementById('btn');
        

        function show(){
            alert('事件监听');
        }
 
        var eventUntil = {
            //添加事件
            Add:function(obj,type,Event){
                if(obj.addEventListerner){     //兼容 谷歌,火狐
                    obj.addEventListerner(type,Event,false);  
                }
                else if(obj.attachEvent){    //兼容IE,Opera
                    obj.attachEvent('on'+type,Event);
                }
                else{
                    obj['on'+type] = Event;
                }
            },
            //删除事件
            Remove:function(obj,type,Event){
                if(obj.removeEventListerner){     //兼容 谷歌,火狐
                    obj.removeEventListerner(type,Event,false);  
                }
                else if(obj.detachEvent){    //兼容IE,Opera
                    obj.detachEvent('on'+type,Event);
                }
                else{
                    obj['on'+type] = null;
                }
            }
            
        }
        eventUntil.Add(btn,'click',show)
    </script>
</head>
<body>
    <input type="button" value="btn" id="btn"></input>
</body>
</html>

   求大神帮解答下! 最近写一些类似有参数的函数,大部分都会弹出这个错误,实在是想不通, 求解答下,谢谢了

提问者:慕码人0911192 2015-12-23 23:33

个回答

  • xue5hen
    2015-12-24 01:05:57
    已采纳

    主要错误有两处:

    1、代码中的addEventListener都被错误的写成了addEventListerner,多了个r;

    2、你的script标签写在head标签里,应该在外面包裹上window.onload=function(){这里是你上面的代码}。

        或者你可以将script标签放在body结束标签之前,即</body>上方。因为页面是自上而下进行加载的,页面自身的HTML元素尚未加载(也就是btn按钮尚不存在),你就对它添加事件,浏览器找不到相应节点,自然会出错。