我尝试了在这里找到的解决方案:How do I add a delay in a JavaScript loop?,但我无法使它对我有效。
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()黑客(每个值都是唯一的),我只是创建了一个全新的元素,并复制了相关的数据,然后删除()旧的。拖曳在另一个点被适当地绑定到它。这样,问题就解决了。
发布于 2012-04-17 04:48:45
编辑
试试.setTimeout()
我没有读到您说不能使用.Delay()。
发布于 2012-04-17 05:30:33
顺便说一下,您可能会发现通过替换
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
。
实际上,这可能就是破坏你的代码的原因。第一个span
已经对它重新应用了10次draggable
。draggable
幂等吗?
https://stackoverflow.com/questions/10185138
复制相似问题