为什么当删除jquery draggable元素时,我的计数错误?

时间:2017-06-07 23:12:48

标签: jquery draggable droppable

我遇到了删除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
    }
});

http://jsfiddle.net/PBrockmann/ewgevoc5/

1 个答案:

答案 0 :(得分:1)

当您使用鼠标拖动时,您的警报正在计算可拖动项目创建的克隆(如果您检查DOM树,则可以看到新<tr>元素是作为{{1的子项创建的元素)。

通过调用setTimeout函数,它实质上将警报移动到调用堆栈的末尾,这允许jQuery代码在调用警报之前清理克隆。