2012-04-17 161 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冪等?