2017-01-21 62 views
1

我正在使用jQuery UI排序,並且只是在條件爲true時試圖阻止拖動。我遇到了這個解決方案:https://stackoverflow.com/a/18470982/3758078,但是在拖動停止時取消拖動,而不是在拖動開始之前。其他解決方案建議在sort:事件中使用return false;,但只是返回錯誤。在開始之前取消拖動

$(elements).sortable({ 
     start: function() { 
      if(true) { 
       //cancel dragging before it begins 
      } 
     } 
    }); 
+0

您可以使用「禁用」方法來防止它啓動嗎? –

回答

2

這是一個使用start回調的工作示例。
可以使用allowdrag複選框以啓用/禁用拖動功能:

$(document).ready(function() { 
 
    $("#draggable").draggable({ 
 
     revert: "invalid", 
 
     start: function(e) { 
 
     if (!$('#allowdrag').is(':checked')) { 
 
      e.preventDefault(); 
 
     } 
 
     } 
 
    }); 
 
    $("#Dropable").droppable({ 
 
     activeClass: "ui-state-highlight", 
 
     drop: function (event, ui) { 
 
      alert("dropped!"); 
 
     }, 
 
     tolerance: 'fit' 
 
    }); 
 
});
#draggable { 
 
    width: 150px; 
 
    height: 150px; 
 
    padding: 0.5em; 
 
} 
 
#Dropable { 
 
    height:300px; 
 
    width:400px; 
 
    border: 2px solid red; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min.css"> 
 
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min.js"></script> 
 
<input type="checkbox" id="allowdrag" /><label for="allowdrag"> Allow drag</label><br /> 
 
<div id="draggable" class="ui-widget-content"> 
 
    <p>Drag me around</p> 
 
</div> 
 
<div id="Dropable">Droppable area</div>

您可以更改if (!$('#allowdrag').is(':checked')) {一部分,無論你想爲了使檢查/禁用拖動選項。

+0

我使用sortable();這個例子使用可拖動。我在啓動事件中使用了e.preventDefault,並得到控制檯錯誤。 – guub

+0

@guub它應該完全一樣。您是否已將'e'變量添加到'function(e){..}'定義中? – Dekel

+0

@guub你檢查了嗎? – Dekel

相關問題