47

我正在尝试在浏览器窗口中实现从桌面拖放文件。我使用 jQuery 将三个事件附加到 HTML 元素,如下面的代码所示:

$("html").on("dragover", function() {
    $(this).addClass('dragging');
});

$("html").on("dragleave", function() {
    $(this).removeClass('dragging');
});

$("html").on("drop", function(event) {
    event.preventDefault();  
    event.stopPropagation();
    alert("Dropped!");
});

'dragover' 和 'dragleave' 事件工作正常,当我将文件拖到上方时会在整个页面周围显示一个嵌入边框,如果我再次将文件拖出则将其删除。

但是,“drop”事件似乎根本没有触发,被删除的文件只是在浏览器窗口中打开。

有谁知道为什么这个事件没有触发?

顺便说一句,我正在最新版本的 Chrome 中测试它并使用 jQuery 1.10.2。

4

2 回答 2

120

您需要取消所有活动

$("html").on("dragover", function(event) {
    event.preventDefault();  
    event.stopPropagation();
    $(this).addClass('dragging');
});

$("html").on("dragleave", function(event) {
    event.preventDefault();  
    event.stopPropagation();
    $(this).removeClass('dragging');
});

$("html").on("drop", function(event) {
    event.preventDefault();  
    event.stopPropagation();
    alert("Dropped!");
});
于 2013-10-07T11:17:27.660 回答
23

除了克里斯蒂安的解决方案,这可以缩短为:

$('#my-dropzone')
    // crucial for the 'drop' event to fire
    .on('dragover', false) 

    .on('drop', function (e) {
        // do something
        return false;
    });
于 2016-08-25T10:53:58.973 回答