丢弃事件未在chrome中触发

Mil*_*uzz 80 javascript jquery events drag-and-drop jquery-events

看来drop事件并没有在我预料到的时候触发.

我假设当被拖动的元素在目标元素上方释放时会触发drop事件,但这似乎不是这种情况.

我有什么误会?

http://jsfiddle.net/LntTL/

$('.drop').on('drop dragdrop',function(){
    alert('dropped');
});
$('.drop').on('dragenter',function(){
    $(this).html('drop now').css('background','blue');
})
$('.drop').on('dragleave',function(){
    $(this).html('drop here').css('background','red');
})
Run Code Online (Sandbox Code Playgroud)

iam*_*ris 173

为了在div元素上发生drop事件,您必须取消ondragenterondragover事件.使用jquery和你提供的代码......

$('.drop').on('drop dragdrop',function(){
    alert('dropped');
});
$('.drop').on('dragenter',function(event){
    event.preventDefault();
    $(this).html('drop now').css('background','blue');
})
$('.drop').on('dragleave',function(){
    $(this).html('drop here').css('background','red');
})
$('.drop').on('dragover',function(event){
    event.preventDefault();
})
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请查看MDN页面.

  • 你不需要ondragenter,只需要ondragover. (10认同)
  • html5 dnd API 真的那么糟糕吗? (9认同)
  • 仍然不适用于最新的 Chromium (Vivaldi 1.2.490.39 () (32-bit) http://jsfiddle.net/f282n3pt/3/ (2认同)
  • 使用reactjs,您需要将onDragOver处理程序添加到相同的elem中。 (2认同)
  • 从 Chrome 62 开始,您确实需要 ondragenter,因为 ondragover 只会在后续鼠标移动后触发,因此您不会调用 e.preventDefault(),导致 drop 事件有时不会触发 (2认同)

Mic*_*ård 39

你可以event.preventDefault()dragover活动中逍遥法外.这样做会触发drop事件.

  • 有一个未覆盖的边缘情况,您也必须在 dragenter 上调用 e.preventDefault(),请参阅我的其他评论 (4认同)

bob*_*bob 8

为了触发 drop 事件,您需要在 over 事件期间分配一个 dropEffect,否则 ondrop 事件将永远不会被触发:

$('.drop').on('dragover',function(event){
    event.preventDefault();
    event.dataTransfer.dropEffect = 'copy';  // required to enable drop on DIV
})
// Value for dropEffect can be one of: move, copy, link or none
// The mouse icon + behavior will change accordingly.
Run Code Online (Sandbox Code Playgroud)

  • 实际上你需要做`event.originalEvent.dataTransfer.dropEffect = "copy"`因为jQuery使用它自己的`event` (8认同)