我想了解原因
$('#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({ /* */ });
它有效吗?
答案 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');