jQuery.on("drop")没有开火

Tre*_*nch 39 javascript jquery drag-and-drop

我正在尝试从桌面浏览器窗口实现拖放文件.我使用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!");
});
Run Code Online (Sandbox Code Playgroud)

'dragover'和'dragleave'事件工作得很好,当我将文件拖到删除它上时,如果我再次拖出文件,则会在整个页面周围显示插入边框.

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

有谁知道为什么这个事件没有解雇?

顺便说一句,我在最新版本的Chrome中使用jQuery 1.10.2进行测试.

Chr*_*und 98

您需要取消所有活动

$("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!");
});
Run Code Online (Sandbox Code Playgroud)

  • 对于任何追随者; 它的额外取消"dragover"导致下降然后开火.取消dragenter和dragleave是不够的.正如@Christian所说,你必须全部取消它们. (20认同)
  • 由于我先在这里结束了google,或许可以查看[this](http://stackoverflow.com/questions/21339924/drop-event-not-firing-in-chrome)的答案,以及引用的链接[ MDN](https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Drag_operations#droptargets)及解释*为什么*你必须取消活动! (5认同)
  • 你能否解释我为什么需要删除/取消CSS (2认同)
  • 如果你的意思是"$(this).removeClass('dragging')"语句,这只是在拖动发生时样式化页面的OP方式.它与拖放操作无关. (2认同)

Jim*_*Blu 12

除了Christian的解决方案,这可以缩短为:

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

    .on('drop', function (e) {
        // do something
        return false;
    });
Run Code Online (Sandbox Code Playgroud)