replaceWith和jQuery draggable drop?

我想知道为什么

$('#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 。 如果我插入$('#title').append('ha'); 在drop:里面,它有效。 但是如果我把$('#title').replaceWith('ha'); 外面的任何地方

 $(".droppable").droppable({ /* */ }); 

有用?

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

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

也许你可以做的是用一些虚拟类标记对象(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'); 

我发布这个作为答案,但实际上它更多地是对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); } });