2012-11-30 69 views
1

後立即禁用拖動500ms所以,當我重新排列列表時,只要我放棄該項目,它就會將位置提交給我的後端代碼,並在後端重新排列列表。然而,我遇到了這樣的情況:如果我重新排序真的很快,一段時間後前端和後端的列表不再同步。所以我想在我放下片刻以避免競爭狀態後立即禁用拖動。我想在刪除

function reorder(panelId, type){ 
    $(escapeClientId(panelId)).sortable({ 
     start: function(event, ui){ 
      ui.item.startPos = ui.item.index(); 
     }, 
     stop: function(event, ui){ 
      //submit my start and end position to the server 
      //change the cursor to wait 
      $('body').css('cursor', 'wait'); 
      window.setTimeout(wait,600);          
     } 
    }); 
    $(escapeClientId(panelId)).disableSelection(); 
} 
function wait(){ 
    $('body').css('cursor', 'default'); 
} 

正如你所看到的,我將光標移到wait光標600毫秒,但是即使光標處於等待模式,它仍然允許用戶拖動重新排序。在我放下之後,有沒有辦法在短時間內完全禁用拖拽?

回答

2

您可以嘗試使用disableenable方法:

function reorder(panelId, type) { 
    $(escapeClientId(panelId)).sortable({ 
     start: function (event, ui) { 
      ui.item.startPos = ui.item.index(); 
     }, 
     stop: function (event, ui) { 
      var panel = $(this), 
       body = $('body'); 

      panel.sortable("disable"); // Disable before submitting. 
      body.css('cursor', 'wait'); 

      //submit my start and end position to the server 
      //change the cursor to wait 

      setTimeout(function() { 
       body.css('cursor', 'default'); 
       panel.sortable("enable"); 
      }, 500); // Enable after 500 ms. 
     } 
    }); 
    $(escapeClientId(panelId)).disableSelection(); 
} 
+0

謝謝,其實我也有類似的做法,但一個小問題是,如果以後我放棄,我又重新排序的真快,我的光標從不回到默認狀態,它保持「等待」。你能幫我解決這個問題嗎? –

+0

@ThangPham我已經更新了答案。這對你更好嗎? –

+0

非常感謝您的幫助,但它仍然無效。我仍然遇到同樣的問題。 –