3

我有一个删除它正在使用的元素的事件。看起来像这样:

$('.droppable_slot').droppable({
    drop: function (event,ui) {
        // snipped lines of code
        delete_element(ui.draggable);
    }
);

我得到一个错误a(this).data("draggable") is undefined显然是因为delete_element()删除了 drop 事件正在使用的元素(应该如此)。我不知道如何避免这种情况,除非仅在 drop 事件(或 .droppable() 插件)完成运行其功能后以某种方式运行 delete_element() ,但我不知道该怎么做。我可以抑制错误,但我宁愿避免这种情况。

4

1 回答 1

3

显然,在放置操作完成将源元素移动到目标容器之前,您太早地清除了源容器。

由于在 之后没有由droppable小部件触发的事件,使用setTimeout()drop延迟清除操作直到删除完成可能是一个很好的解决方法:

$(".droppable_slot").droppable({
    drop: function(event, ui) {
        // Snipped lines of code...
        window.setTimeout(function() {
            delete_element(ui.draggable);
        }, 10);
    }
});

但这是一种解决方法,而不是解决方案。我们这里真正需要的是drop操作完成后发生的事件。小部件的stop事件draggable可能符合条件。但是,如果不查看更多代码,就很难分辨。

于 2012-09-05T20:39:14.287 回答