Drop event not firing in chrome

后端 未结 4 1631
生来不讨喜
生来不讨喜 2020-12-02 18:02

It seems the drop event is not triggering when I would expect.

I assume that the drop event fires when an element that is being dragged is releases above the target

相关标签:
4条回答
  • 2020-12-02 18:20

    In order to have the drop event occur on a div element, you must cancel the ondragenter and ondragover events. Using jquery and your code provided...

    $('.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();
    })
    

    For more information, check out the MDN page.

    0 讨论(0)
  • 2020-12-02 18:32

    In order for the drop event to fire, you need to assign a dropEffect during the over event, otherwise the ondrop event will never get triggered:

    $('.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.
    
    0 讨论(0)
  • 2020-12-02 18:37

    This isn't an actual answer but for some people like me who lack the discipline for consistency. Drop didn't fire for me in chrome when the effectAllowed wasnt the effect I had set for dropEffect. It did however work for me in Safari. This should be set like below:

    ev.dataTransfer.effectAllowed = 'move';

    Alternatively, effectAllowed can be set as all, but I would prefer to keep specificity where I can.

    for a case when drop effect is move:

    ev.dataTransfer.dropEffect = 'move';

    0 讨论(0)
  • 2020-12-02 18:45

    You can get away with just doing an event.preventDefault() on the dragover event. Doing this will fire the drop event.

    0 讨论(0)
提交回复
热议问题