2012-04-17 163 views
1

我试过在这里找到的解决方案:How do I add a delay in a JavaScript loop?但我无法让它为我工作。添加延迟For For循环

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()插件。我正在使用键盘快捷键(键控)来运行这个十进制功能()。如果我不止一次地按下按键,许多新对象将无法拖动。这似乎是随机的,哪些对象无法拖动。我认为也许我的快速按键会破坏那些失败的绑定事件,但即使我放慢了速度,有些也不会拖延。

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

SOLUTION

那是我去一个第三脚本处理使用appendTo(),以这些元素是导致该问题。

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

+1

这很可能是问题在于createEntry()函数。 – 2012-04-17 04:42:58

+0

你可以发布'createEntry'吗? – 2012-04-17 04:55:08

+0

@joeframbach - 我添加了该功能;它非常裸露,所以我省略了它,但它可能是破坏它的语法。 – 2012-04-17 05:27:23

回答

1

编辑

尝试.setTimeout()

我没看过,你说.Delay()不能使用。

+0

尝试再次阅读该问题。 *“不幸的是,这不是一个动画,所以我不能使用.delay()。”* – Ryan 2012-04-17 04:49:36

0

顺便说一句,你可以通过与

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

更换

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

发现轻微的性能优势,因为你可能不希望重新申请draggable到所有已经存在的span的秒。

其实,这可能是什么打破了你的代码。第一个span已将draggable重新应用了10次。是draggable幂等?