2013-03-29 31 views
2

我有这个网站是可拖动的链接网格。拖动时,会出现一个下拉列表,用户可以通过拖放来拖放可拖动的内容。删除<a href>从被拖动时可拖动 - jquery

问题是,当他们把它放在droppble上,链接打开!这不应该发生。我试过添加

ui.draggable.find('a').removeAttr('href') 

我的handleDropEvent函数,但它没有帮助。

任何javascript geniuses都会照看一下吗?

编辑我试过还补充说:

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

以下,像这样:

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

ANOTHER编辑

我要指出的(只是想出了)那我有可拖动的类应用于这样的href:

<a href class="draggable"> 

因此,迄今为止的解决方案导致了问题,我们删除链接并阻止可拖动的可拖动!有另一种方法吗?

+1

它正在为我工​​作(Chrome)。顺便说一句,你有一个PHP变量没有定义:检查控制台(F12) – sdespont

+0

它不是在FF tho –

+0

它在火狐18和19工作。 – NessDan

回答

2

当他们拖着所设定的处理程序,以防止默认动作,就像这样:

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

就像我说的,做的时候都在的情况下为时已晚在下降时做的时候把它拖到。

UPDATE:

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

+0

我试图在声明可拖动的代码时将它添加到start函数中,如$('。draggable')。draggable({start:function() - note参见上面的代码,在我的Qu中编辑更完整的代码但是它没有工作我对JS有点新东西把它放在正确的位置 –

+0

我编辑了代码你在你的问题中发布了添加'event,ui'参数,那么你需要稍后使用'ui.blabla',试试.. – Nelson

+0

对不起,总是新手在这里。ui.blabla不确定你的意思。帮助你:)你能解释一下吗? –

0

尝试将onclick设置为 返回false;

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)); 
    } 
} 

此外,如果您查看源代码,一切都被编码(撇号,报价等),不知道这是怎么发生的,但我会解决这个问题。

+0

我试过,但它没有工作。不知道你是什么意思关于编码报价等... –

+0

@PatrickGuinness下面是我在说什么的图片:http://i.imgur.com/3belgB8.png – NessDan