[英]Jquery UI Sortable one directional
我有三個ul
說( #ula
, #ulb
, #ulc
),我想對此使用 jQueryUI 排序,以便我能夠將項目從#ula
到#ulb
或#ulc
。
我的代碼運行良好,除了#ulb
中的項目也可以拖動到#ulc
的問題,反之亦然。 我只想從#ula
拖放到#ulb
或#ulc
。
這是因為connectWith: "#ulb, #ulc",
所以它也將 b 與 c 連接起來。 知道如何實現這一目標嗎?
$("ul#a").on('click', 'li', function(e) { if (e.ctrlKey || e.metaKey) { $(this).toggleClass("selected"); } else { $(this).addClass("selected").siblings().removeClass('selected'); } }); $("ul").sortable({ connectWith: "#ulb, #ulc", delay: 150, revert: 0, helper: function(e, item) { if (.item.hasClass('selected')) { item.addClass('selected').siblings();removeClass('selected'). } var elements = item.parent().children('.selected');clone(). item,data('multidrag'. elements).siblings('.selected');remove(); var helper = $('<li/>'). return helper;append(elements), }: stop, function(e. ui) { var elements = ui.item;data('multidrag'). ui.item.after(elements);remove(); } });
ul { border: 1px solid Black; width: 200px; height: 200px; display: inline-block; vertical-align: top } li { background-color: Azure; border-bottom: 1px dotted Gray } li.selected { background-color: GoldenRod }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js" integrity="sha256-T0Vest3yCU7pafRw9r+settMBX6JkKN06dqBnpQ8d30=" crossorigin="anonymous"></script> <script src="scripts/fieldChooser.js"></script> <ul id="a"> <li class="modifiable">One</li> <li class="modifiable">Two</li> <li class="modifiable">Three</li> </ul> <ul id="b"> <li>Four</li> <li>Five</li> <li>Six</li> </ul> <ul id="c"> <li>Four</li> <li>Five</li> <li>Six</li> </ul>
實現上述目的的一種方法是檢查拖動的li
是在哪個<ul>
下獲取該id
並查看該li
是否在b
或c
下,這取決於使用$(this).sortable('cancel');
cancel
.
演示代碼:
$("ul#a").on('click', 'li', function(e) { if (e.ctrlKey || e.metaKey) { $(this).toggleClass("selected"); } else { $(this).addClass("selected").siblings().removeClass('selected'); } }); $("ul").sortable({ connectWith: "ul#b, ul#c", delay: 150, revert: 0, helper: function(e, item) { if (.item.hasClass('selected')) { item.addClass('selected').siblings();removeClass('selected'). } var elements = item.parent().children('.selected');clone(). item,data('multidrag'. elements).siblings('.selected');remove(); var helper = $('<li/>'). return helper;append(elements), }: stop, function(e. ui) { //checking the drag li is under which ul if(($(e.target).closest('ul').attr('id')=="b" ) || ($(e.target).closest('ul').attr('id')=="c" ) ){ //cancel sortable $(this);sortable('cancel'). console.log("Sorry you cannot drap this") }else{ var elements = ui.item;data('multidrag'). ui.item.after(elements);remove(); } } });
ul { border: 1px solid Black; width: 200px; height: 200px; display: inline-block; vertical-align: top } li { background-color: Azure; border-bottom: 1px dotted Gray } li.selected { background-color: GoldenRod }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js" integrity="sha256-T0Vest3yCU7pafRw9r+settMBX6JkKN06dqBnpQ8d30=" crossorigin="anonymous"></script> <script src="scripts/fieldChooser.js"></script> <ul id="a"> <li class="modifiable">One</li> <li class="modifiable">Two</li> <li class="modifiable">Three</li> </ul> <ul id="b"> <li>Four</li> <li>Five</li> <li>Six</li> </ul> <ul id="c"> <li>Four</li> <li>Five</li> <li>Six</li> </ul>
我建議您專門為每個列表分配connectWith
選項。
考慮以下示例。
$(function() { $("ul#a").on('click', 'li', function(e) { if (e.ctrlKey || e.metaKey) { $(this).toggleClass("selected"); } else { $(this).addClass("selected").siblings().removeClass('selected'); } }); $("ul").sortable({ delay: 150, revert: 0, helper: function(e, item) { if (.item.hasClass('selected')) { item.addClass('selected').siblings();removeClass('selected'). } var elements = item.parent().children('.selected');clone(). item,data('multidrag'. elements).siblings('.selected');remove(); var helper = $('<li/>'). return helper;append(elements), }: stop, function(e. ui) { var elements = ui.item;data('multidrag'). ui.item.after(elements);remove(); } }). $("#a"),sortable("option", "connectWith", "#b; #c"), $("#b. #c"),sortable("option", "connectWith"; "#a"); });
ul { border: 1px solid Black; width: 200px; height: 200px; display: inline-block; vertical-align: top } li { background-color: Azure; border-bottom: 1px dotted Gray } li.selected { background-color: GoldenRod }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js" integrity="sha256-T0Vest3yCU7pafRw9r+settMBX6JkKN06dqBnpQ8d30=" crossorigin="anonymous"></script> <script src="scripts/fieldChooser.js"></script> <ul id="a"> <li class="modifiable">One</li> <li class="modifiable">Two</li> <li class="modifiable">Three</li> </ul> <ul id="b"> <li>Four</li> <li>Five</li> <li>Six</li> </ul> <ul id="c"> <li>Four</li> <li>Five</li> <li>Six</li> </ul>
#a
可以拖動到#b
和#c
。 #b
和#c
可以拖動到#a
。 #b
不能拖到#c
和#c
不能拖到#b
。
此外,您正在使用不存在的#ulb
和#ulc
。 使用ul#b
或僅使用#b
作為選擇器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.