【问题标题】:Drag and drop javascript event拖放javascript事件
【发布时间】:2013-03-06 04:23:48
【问题描述】:

我是一名 java 人,正在尝试使用 javascript,需要一些帮助。我在这里Mozilla Tutorial 遇到了一个关于图片上传的精彩教程,需要一些帮助来解决这个问题。我目前正在研究拖放图像上传功能。每次我将图像拖到我的区域时,鼠标都会变为绿色,因此它被激活。但是,当我放手时,它应该会向我发送一条警报,提示已找到一张图像。但是它总是只提醒 0。所以数组的大小是 0。有什么想法吗?谢谢参观。我尝试过的没有成功...

  1. 将教程中的代码复制并粘贴到我的 javascript 文件中
  2. 移动代码以将侦听器添加到函数外部并加载到窗口中
  3. 我拥有的每个浏览器

...

function toggleStrideMedia()
{
    if(getDisplay("strideMediaWrapper") == "" || getDisplay("strideMediaWrapper") == "none")
    {
        show("strideMediaWrapper");

        getElement("strideMediaDropZone").addEventListener("dragenter", dragenter, false);
        getElement("strideMediaDropZone").addEventListener("dragover", dragover, false);
        getElement("strideMediaDropZone").addEventListener("drop", drop, false);

    }
    else
    {
        hide("strideMediaWrapper");
    }
}

function dragenter(e) 
{
    e.stopPropagation();
    e.preventDefault();
}

function dragover(e) 
{
    e.stopPropagation();
    e.preventDefault();
} 

function drop(e) 
{
    e.stopPropagation();
    e.preventDefault();

    var dt = e.dataTransfer;
    var files = dt.files;

    // THIS SHOULD BE GIVING ME A ONE BUT IT ALWAYS GIVES ME A ZERO INSTEAD
    alert(files.length);

    handleFiles(files);
}

.

更新 - 小提琴结果

【问题讨论】:

    标签: javascript


    【解决方案1】:

    更新
    实际的问题是,如果您尝试将图像直接从一个 Web 浏览器选项卡拖放到这个基于 Web 的拖放界面,该事件将触发但不会删除任何文件。提问者在 OSX 上注意到了这个问题,我能够在 Windows 7 中复制相同的行为。


    没有看到您的 HTML,很难说出您遇到的困难。如果未正确设置 ondragover/ondragenter 部分,则删除将不起作用,但您根本不会看到警报,您只会看到浏览器从本地文件系统呈现图像。这也意味着您几乎可以肯定成功地将 drop 事件添加到正确的元素。

    试试这个 Fiddle 看看它是否适合你:http://jsfiddle.net/qey9G/4/

    HTML

    <div>
            <div id="dropzone" style="margin:30px; width:500px; height:300px; 
                                      border:1px dotted grey;">
                   Drag & drop your file here...
            </div>
    </div>
    

    JavaScript

    var dropzone = document.getElementById("dropzone");
    
    dropzone.ondragover = dropzone.ondragenter = function(event) {
        event.stopPropagation();
        event.preventDefault();
    }
    
    dropzone.ondrop= function drop(e) 
    {
        e.stopPropagation();
        e.preventDefault();
    
        var dt = e.dataTransfer;
        var files = dt.files;
    
        alert(files.length);
    }
    

    【讨论】:

    • 使用 ondragoverondrop 而不是 addEventListener 可能会使其在 IE8 上工作,但在其他情况下(即对于现代浏览器),这应该与 addEventListener 一样工作。无论如何,简单测试 +1。
    • 我同意,总的来说,这里附加事件的方式有点古老。我假设因为他看到了一个警报,但他已经成功地附加了所有这些。
    • 我不确定这是否可行...Mac 具有特殊处理功能,可让您从网络拖放图像 - 以 下载页面到 Finder 或您的桌面,这可能会造成干扰。尝试直接从 Finder 上传图片。
    • Np...我想您只需要向用户解释他们必须先将图像拖放到 Finder(或他们的桌面),然后再从 Finder 拖放到您的页面。跨度>
    • 感谢大家的帮助!我需要让自己回到有意义的 Java :)
    猜你喜欢
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多