1

我尝试了此处找到的解决方案:如何在 JavaScript 循环中添加延迟?但我无法让它为我工作。

    jQuery.fn.createEntry = function () {
        $("#List").append('<span>New Entry</span>');
        $("#List span").draggable({ grid: [30,45] });
    }

    jQuery.fn.tenTimes = function() {
        for (var i = 1; i <= 10; i++){
            $(document).createEntry();
        }
    }

在 .createEntry() 脚本中,新对象绑定到我拥有的 .draggable() 插件。我正在使用键盘快捷键(keyup)来运行这个 tenTimes 函数()。如果我过快地多次按下该键,许多新对象将无法拖动。哪些对象无法变得可拖动似乎是随机的。我想也许我的快速按键会破坏那些失败的绑定事件,但即使我走慢,有些也不会变得可拖动。

在继续 for 循环之前,有什么方法可以检查对象是否正确绑定?有没有更好的方法?不幸的是,这不是动画,所以我不能使用 .delay()。

解决方案

这是我使用的第三个脚本,它使用 appendTo() 处理了导致问题的元素。

使用 append() 或 appendTo() 似乎使对象与可拖动对象保持绑定,但它沿途丢失了左/上 css,因此无法拖动。我没有找出一些 .css() hack(每个值都是唯一的),而是简单地创建了一个全新的元素,并将相关数据复制过来,然后 remove() 旧的。Draggable 在其他某个点正确绑定到它。有了这个,问题就解决了。

4

2 回答 2

1

编辑

尝试 .setTimeout()

我没有读到你说 .Delay() 不能使用。

于 2012-04-17T04:48:45.583 回答
0

顺便说一句,您可能会发现通过替换

jQuery.fn.createEntry = function () {
    $("#List").append('<span>New Entry</span>');
    $("#List span").draggable({ grid: [30,45] });
}

jQuery.fn.createEntry = function () {
    $("#List").append($('<span>New Entry</span>').draggable({ grid: [30,45] }));
}

因为您可能不想重新申请draggable所有已经存在span的 s。

实际上,这可能是破坏您的代码的原因。第一个span已经draggable重新申请了10次。是draggable幂等的吗?

于 2012-04-17T05:30:33.047 回答