replaceWith和jQuery draggable drop?

时间:2009-07-10 20:49:34

标签: jquery jquery-ui jquery-plugins draggable droppable

我想了解原因

$('#title').replaceWith('ha'); 

将在

之外工作
drop: function(event, ui) {}

jquery的droppable脚本中的区域,但它不能在里面工作。具体来说,如果我做

$(".droppable").droppable({
drop: function(event, ui) {
    $('#title').replaceWith('ha'); 
     }

我得到Runtime Error (line 1102) data(...).options is null or not an object。此外,如果我在drop:中插入$('#title').append('ha');,它也可以。 但是,如果我将$('#title').replaceWith('ha');放在

以外的任何地方
$(".droppable").droppable({ /* */  });

它有效吗?

2 个答案:

答案 0 :(得分:7)

我发布这个作为答案,但实际上它更多地是对Jon Erickson的答案的评论(我没有声誉点评论)。 18个月后,这仍然是IE中的一个错误,我只是想通过建议setTimeout()

来详细说明'如何在drop函数之外运行某些东西'部分。

我通过传递一个将元素移除到setTimeout()的匿名函数来解决问题。根据您的快照或还原设置,您可能还需要考虑隐藏可拖动的。

$(".droppable").droppable({
    drop: function(event, ui) {
        // do something interesting here...

        // now get rid of the draggable
        $(ui.draggable).hide();           
        setTimeout(function(){$(ui.draggable).remove();}, 1);
    }
});

答案 1 :(得分:3)

id ='title'的元素是否也有class ='droppable'

我可以看到它是否正在尝试删除会导致drop事件发生的元素,可能没有更多的元素可以使用,并且你可能会得到一个'not an object'错误。如果不亲自尝试,我不确定。

也许你可以做的是用一些虚拟类标记对象(jQuery的数据更合适并且符合SRP,但这超出了这个答案的范围),然后在droppable的drop函数之外你可以做替换

类似......

$(".droppable").droppable({
    drop: function(event, ui) {
        // mark the element for replacement
        $('#title').addClass('replaceThisElement'); 
    }
});

// outside of the drop function
$('#title .removeThisElement').replaceWith('ha');