HTML

<div id="dropableArea">Drop area</div>
<hr>

<ul>
    <li class="dragModule">Item 1</li>
    <li class="dragModule">Item 2</li>
    <li class="dragModule">Item 3</li>
</ul>


jQuery查询

$(function(){
    $('.dragModule').draggable({connectToSortable:'#dropableArea',helper: 'clone'});

    $('#dropableArea').droppable({
        accept: '.dragModule',
        activeClass:'active-droppable',

        drop:function(){
            console.log('drop');
        }
    });

    $('#dropableArea').sortable({accept: '.dragModule',connectWith: '#dropableArea',revert: true,});
    $("#dropableArea").disableSelection();
});


我的问题是我控制台console.log('drop');这是可放置的回调放置函数,它被调用了两次。

最佳答案

这是jQuery UI的已知问题。当您在同一元素上使用droppable和sortable时,会发生此问题。在这里,您在同一元素droppableArea上使用droppable和sortable
为了解决此问题,请使用dropdroppable方法代替recievesortable方法。在您的情况下,两者都做相同的事情。

检查FIDDLE

$(function() {
  $('.dragModule').draggable({
    connectToSortable: '#dropableArea',
    helper: 'clone'
  });

  $('#dropableArea').droppable({
    accept: '.dragModule',
    activeClass: 'active-droppable'
  });

  $('#dropableArea').sortable({
    accept: '.dragModule',
    connectWith: '#dropableArea',
    revert: true,
    receive: function (event, ui) {
       console.log("drop");
    }
  });
  $("#dropableArea").disableSelection();
});


更改上面的代码,它将解决问题。请让我知道问题是否已解决

#UPDATE

您可以在可排序函数中添加以下代码

 beforeStop : function (event, ui) {
   ui.helper.html('hello');
 }

关于javascript - jQuery UI drop事件的可转换触发两次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55535947/

10-13 00:18