我尝试了此处找到的解决方案:如何在 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 在其他某个点正确绑定到它。有了这个,问题就解决了。