2
4

4 回答 4

2

当它们被拖动时,设置一个单击处理程序以防止默认操作,如下所示:

ui.draggable.find('a').click(function(e) { e.preventDefault(); });

正如我所说,当它们被拖动时执行它,以防在 drop 事件中执行它时为时已晚。

更新:

$('.draggable').draggable({ 
  start: function( event, ui ) {
    $('#dropdownAddTile').slideDown();
    ui.draggable.find('a').click(function(e) { 
      e.preventDefault(); 
    });
  },  
  stop: function() {
    $('#dropdownAddTile').slideUp();
  }, 
  containment: '#container', 
  snap:'.droppable', 
  snapMode:'inner', 
  revert:'invalid',
  snapTolerance: 32
});

所以你可以打电话ui.draggable.find('a').click(function(e) { e.preventDefault();

于 2013-03-29T15:11:36.923 回答
0

该问题在 Chrome、Firefox 或 IE10 中没有出现,但在 IE9 及更低版本中确实发生了。

我的建议是参加preventDefault这个活动。使用您的代码,

function handleDropEvent( event, ui ) {
    event.preventDefault();
    var draggable = ui.draggable;
    var droppable = $(this);
    var droppableId = $(this).attr("id");
    var draggableId = ui.draggable.attr("id");
    $('.draggable').draggable({containment: '#container', snap:'.droppable', snapMode:'inner', revert:'invalid',snapTolerance: 32});
    $('.droppable').droppable({drop: handleDropEvent, accept: function(e){if(e.hasClass('draggable')) { if (!$(this).hasClass('occupied')) {return true; }}}});
    var initPosit = ui.draggable.parent().attr('id');

    $.post("tiles/updateTilePosition", { draggableId:draggableId, droppableId: droppableId }).done(function(data) {

    })
    $(this).addClass('occupied');
    ui.draggable.parent().removeClass('occupied');
    if($(ui.draggable).parent() !==$(this)){
        $(ui.draggable).appendTo($( this ));
    }
}

此外,如果您查看源代码,所有内容都已编码(撇号、引号等)。不确定这是如何发生的,但我会修复它。

于 2013-03-29T15:16:35.197 回答
-1

尝试将 onclick 设置为返回 false;

于 2013-03-29T15:06:09.143 回答
-3

如果我理解正确,您只是希望链接不能被拖动,对吗?做这个:

<a href="#test" draggable="false">Test</a>

这基本上就是你如何禁用拖动功能 idk 为什么每个人都为此编写这么长的代码......

于 2019-01-22T20:17:22.957 回答