我遇到了删除jquery draggable元素时发生的意外行为。如果我没有设置setTimeout,那么剩余元素的计数是错误的。
有人可以解释我为什么需要这种延迟吗?
$("#mytable tr").draggable({ helper: "clone"});
$('#trash').droppable({
tolerance: "pointer",
drop: function(event, ui) {
ui.draggable.remove();
alert($('#mytable tr').length);
// --> this gives a wrong number of rows
//setTimeout(function(){alert($('#mytable tr').length);},0);
// --> this gives the right number despite the 0 delay
}
});
答案 0 :(得分:1)
当您使用鼠标拖动时,您的警报正在计算可拖动项目创建的克隆(如果您检查DOM树,则可以看到新<tr>
元素是作为{{1的子项创建的元素)。
通过调用setTimeout函数,它实质上将警报移动到调用堆栈的末尾,这允许jQuery代码在调用警报之前清理克隆。