简体   繁体   English

为什么为什么不断收到“无法调用null的方法'addEventListener'”?

[英]Why do I keep getting “Cannot call method 'addEventListener' of null”?

I'm am VERY inexperienced in webdev, but here i am making a website. 我对webdev非常缺乏经验,但是在这里我正在制作一个网站。 Im using Fabric.js and a script from an answer from stackoverflow so that the user can drag an image from one div into a canvas. 我使用了Fabric.js和来自stackoverflow的答案中的脚本,以便用户可以将图像从一个div拖动到画布中。 When i test it out i always get the error "Cannot call method 'addEventListener' of null". 当我对其进行测试时,我总是收到错误“无法调用null的方法'addEventListener'”。 I guess it means that what ever the script is trying to load, it hasn't loaded thus leaving it as null. 我想这意味着无论脚本尝试加载什么,都没有加载,因此将其保留为null。 The console says its from line 77 (canvasContainer.addEventListener('dragenter'..., near the bottom) in my JS file. I've tried moving the import script code lower down (under body) so that it loads after everything else but it still doesn't work. Any ideas? 控制台从我的JS文件中的第77行(canvasContainer.addEventListener('dragenter'...,靠近底部)说出它的位置。但还是不行,有什么想法吗?

PS. PS。 the the javascript comes from natchiketa. JavaScript来自natchiketa。

HTML: HTML:

<!doctype html>
<html lang="en";>
<head>
    <meta charset="utf-8" />
    <title>CustomCase</title>
    <link rel="stylesheet" href="SkapaDesign.css">
    <script src="Jquery.js"></script>
    <script src="Modernizr.js"></script>
    <script src="Fabric.js"></script>
    <script src="Canvas.js"></script>
</head>
<body>  
    <div id="Wrapper">  
        <section id="Body">
                <div id="CanvasDiv">
                    <canvas id="Canvas" width="270px" height="519px"></canvas>
                </div>

                <div id="TextureView">
                    <div id="TextureViewInside">
                        <ul class="products">
                            <img draggable="true" src="FärgadePapper.png">
                            <img draggable="true" src="Hajar.png">
                            <img draggable="true" src="Labyrint.png">
                            <img draggable="true" src="Martini.png">
                        </ul>
                    </div>
                </div>  
        </section>
    </div>
</body>
</html>

CSS: CSS:

#Body{
    height: 675px;
}
#Canvas, #TextureView{
    float: left;
}
#LeftColumn{
    float: left;
    width: 355px;
    margin: 20px 30px 0px 0px;
}
#RightColumn{
    float: left;
    width: 600px;
    margin-top: 20px;
}
#CanvasDiv{
    width: 270px;
    height: 519px;
    margin-left: 15px;
}
#Canvas{
    overflow: hidden;
}
#TextureView{
    width: 470px;
    height: 559px;
    overflow: auto;
}
#TextureViewInside{
    padding: 10px;
}
ul.products img{
    width: 97px;
    display: inline-block;
    vertical-align: top;
    padding: 4px;
}

JavaScript: JavaScript的:

var canvas = new fabric.Canvas('Canvas');

function handleDragStart(e) {
    [].forEach.call(images, function (img) {
        img.classList.remove('img_dragging');
    });
    this.classList.add('img_dragging');
}

function handleDragOver(e) {
    if (e.preventDefault) {
        e.preventDefault(); 
    }
    e.dataTransfer.dropEffect = 'copy';
    return false;
}

function handleDragEnter(e) {
    this.classList.add('over');
}

function handleDragLeave(e) {
    this.classList.remove('over');
}

function handleDrop(e) {
    if (e.stopPropagation) {
        e.stopPropagation();
    }

    var img = document.querySelector('#images img.img_dragging');

    console.log('event: ', e);

    var newImage = new fabric.Image(img, {
        width: img.width,
        height: img.height,
        left: e.layerX,
        top: e.layerY
    });
    canvas.add(newImage);

    return false;
}

function handleDragEnd(e) {
    [].forEach.call(images, function (img) {
        img.classList.remove('img_dragging');
    });
}

if (Modernizr.draganddrop) {
    var images = document.querySelectorAll('#images img');
    [].forEach.call(images, function (img) {
        img.addEventListener('dragstart', handleDragStart, false);
        img.addEventListener('dragend', handleDragEnd, false);
    });
    var canvasContainer = document.getElementById('CanvasDiv');
    canvasContainer.addEventListener('dragenter', handleDragEnter, false);
    canvasContainer.addEventListener('dragover', handleDragOver, false);
    canvasContainer.addEventListener('dragleave', handleDragLeave, false);
    canvasContainer.addEventListener('drop', handleDrop, false);
} else {
    alert("This browser doesn't support the HTML5 Drag and Drop API.");
}

It looks like you just need to wrap part of the code in a document.ready handler, like this... 看起来您只需要将部分代码包装在document.ready处理程序中,就像这样……

$(function() {
    if (Modernizr.draganddrop) {
        var images = document.querySelectorAll('#images img');
        [].forEach.call(images, function (img) {
            img.addEventListener('dragstart', handleDragStart, false);
            img.addEventListener('dragend', handleDragEnd, false);
        });
        var canvasContainer = document.getElementById('CanvasDiv');
        canvasContainer.addEventListener('dragenter', handleDragEnter, false);
        canvasContainer.addEventListener('dragover', handleDragOver, false);
        canvasContainer.addEventListener('dragleave', handleDragLeave, false);
        canvasContainer.addEventListener('drop', handleDrop, false);
    } else {
        alert("This browser doesn't support the HTML5 Drag and Drop API.");
    }
});

document.getElementById("CanvasDiv") would not have returned an element as the document was not loaded at that time, but the next few lines expect there to be something there. document.getElementById("CanvasDiv")不会返回任何元素,因为当时尚未加载文档,但是接下来的几行期望那里会有东西。 Wrapping it in a document.ready event handler should resolve that issue as the DOM will be loaded by the time you try to reference it. 将其包装在document.ready事件处理程序中应该可以解决该问题,因为在您尝试引用它时将加载DOM。

you can't get the element until the document is loaded... 在加载文档之前,您无法获取元素...

   window.addEventListener('loaded', function(){
       if (Modernizr.draganddrop) {
           var images = document.querySelectorAll('#images img');
           [].forEach.call(images, function (img) {
               img.addEventListener('dragstart', handleDragStart, false);
               img.addEventListener('dragend', handleDragEnd, false);
           });
           var canvasContainer = document.getElementById('CanvasDiv');
           canvasContainer.addEventListener('dragenter', handleDragEnter, false);
           canvasContainer.addEventListener('dragover', handleDragOver, false);
           canvasContainer.addEventListener('dragleave', handleDragLeave, false);
           canvasContainer.addEventListener('drop', handleDrop, false);
       } else {
           alert("This browser doesn't support the HTML5 Drag and Drop API.");
       }
     });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 为什么我无法读取 null javascript 的属性“addEventListener” - why i am getting Cannot read property 'addEventListener' of null javascript 为什么我收到 null 的“无法读取属性”“addEventListener” - Why am i getting 'Cannot read property 'addEventListener' of null 无法调用null错误的方法“ addEventListener” - Cannot call method 'addEventListener' of null error 为什么我总是得到 Null? - Why do I keep getting Null? 为什么我不断收到此错误? 未捕获的类型错误:无法读取 null 的属性(读取“术语”) - why do i keep getting this error? Uncaught TypeError: Cannot read properties of null (reading 'term') 为什么我不断收到此错误? 未捕获的类型错误:无法读取 null 的属性“classList” - Why do I keep getting this error? Uncaught TypeError: Cannot read property 'classList' of null Javascript:未捕获的TypeError:无法调用null的方法&#39;addEventListener&#39; - Javascript: Uncaught TypeError: Cannot call method 'addEventListener' of null Javascript:为什么我得到这个Uncaught TypeError:无法读取null的属性&#39;addEventListener&#39;? - Javascript: Why am I getting this Uncaught TypeError: Cannot read property 'addEventListener' of null? 为什么我一直在控制台日志中保持null? - Why do I keep on getting null in the console log? 为什么在此三元分配中我总是保持空值? - Why do I keep getting null in this ternary assignment?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM