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