#javascript #html #jquery #css
#javascript #HTML #jquery #css
Вопрос:
Я почти близок к тому, чего я пытаюсь достичь. Прямо сейчас приведенный ниже пример кода проверяет, есть ли в поле тег li. Пока это работает, но если в каком-либо из ящиков есть тег li, это просто блокирует функцию перетаскивания других ящиков. Но когда перетаскиваемый блок возвращается в свое предыдущее состояние, тогда другие блоки можно снова перетащить в блоки. Что я пытаюсь сделать, так это:
-
Он должен иметь возможность проверять отдельные поля с помощью тега li
-
Это не должно блокировать функцию для других блоков, если какой-либо из блоков имеет тег li. Скорее, он должен проверять отдельное поле, имеющее тег li
Я не уверен, смогу ли я заставить его работать без объявления нового идентификатора или класса для каждого тега li, скорее ожидая, что он будет работать как есть. Любым способом, чтобы я мог просмотреть тег li и использовать приведенное ниже условие:
if ($('ul#sortable2 li').length > 1) { //This condition blocks drag and drop feature of other boxes if match found
$(this).sortable("cancel");
}
Примечание: никакие два элемента не могут быть скорректированы в блоке одновременно для каждой секции блоков.
$(function () {
$("#sortable1, #sortable2").sortable({
connectWith: ".connectedSortable",
stop: function (event, ui) {
if ($('ul#sortable2 li').length > 1) { //Checks if a li tag exists
$(this).sortable("cancel");
}
},
}).disableSelection();
});
#sortable1, #sortable2 {
border: 1px solid #eee;
width: 142px;
min-height: 20px;
list-style-type: none;
margin: 0;
padding: 5px 0 0 0;
float: left;
margin-right: 10px;
}
#sortable1 li, #sortable2 li {
margin: 0 15px 15px 15px;
padding: 5px;
font-size: 1.2em;
width: 120px;
}
#sortable1 ul li {
display: block;
text-align: center;
float: left;
}
#sortable2 ul li {
display: block;
text-align: center;
float: left;
}
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<!--First Part-->
<div class="col-md-5">
<div class="col-md-12">
<ul id="sortable1" class="connectedSortable">
<li class="ui-state-default">Item 1</li>
</ul>
</div><br />
<div class="col-md-12">
<ul id="sortable1" class="connectedSortable">
<li class="ui-state-default">Item 2</li>
</ul>
</div><br />
<div class="col-md-12">
<ul id="sortable1" class="connectedSortable">
<li class="ui-state-default">Item 3</li>
</ul>
</div><br />
<div class="col-md-12">
<ul id="sortable1" class="connectedSortable">
<li class="ui-state-default">Item 4</li>
</ul>
</div><br />
<div class="col-md-12">
<ul id="sortable1" class="connectedSortable">
<li class="ui-state-default">Item 5</li>
</ul>
</div><br />
</div>
<!--Second Part-->
<div class="col-md-5">
<div class="col-md-12">
<ul id="sortable2" class="connectedSortable">
</ul>
</div>
<div class="col-md-12">
<ul id="sortable2" class="connectedSortable">
</ul>
</div>
<div class="col-md-12">
<ul id="sortable2" class="connectedSortable">
</ul>
</div>
<div class="col-md-12">
<ul id="sortable2" class="connectedSortable">
</ul>
</div>
<div class="col-md-12">
<ul id="sortable2" class="connectedSortable">
</ul>
</div>
</div>
Ответ №1:
У вас повторяющиеся идентификаторы. Это первая проблема, потому что идентификаторы должны быть уникальными. Я изменил идентификаторы с помощью класса.
Для того, чтобы ссылаться на текущее изменение вашего кода из:
if ($('ul#sortable2 li').length > 1) { //Checks if a li tag exists
Для:
if ($(ui.item).closest('ul').find('li').length > 1) { //Checks if a li tag exists
Рабочий фрагмент:
$(".sortable1, .sortable2").sortable({
connectWith: ".connectedSortable",
stop: function (event, ui) {
if ($(ui.item).closest('ul').find('li').length > 1) { //Checks if a li tag exists
$(this).sortable("cancel");
}
}
}).disableSelection();
.sortable1, .sortable2 {
border: 1px solid #eee;
width: 142px;
min-height: 20px;
list-style-type: none;
margin: 0;
padding: 5px 0 0 0;
float: left;
margin-right: 10px;
}
.sortable1 li, .sortable2 li {
margin: 0 15px 15px 15px;
padding: 5px;
font-size: 1.2em;
width: 120px;
}
.sortable1 ul li {
display: block;
text-align: center;
float: left;
}
.sortable2 ul li {
display: block;
text-align: center;
float: left;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<!--First Part-->
<div class="col-md-5">
<div class="col-md-12">
<ul class="sortable1 connectedSortable">
<li class="ui-state-default">Item 1</li>
</ul>
</div><br />
<div class="col-md-12">
<ul class="sortable1 connectedSortable">
<li class="ui-state-default">Item 2</li>
</ul>
</div><br />
<div class="col-md-12">
<ul class="sortable1 connectedSortable">
<li class="ui-state-default">Item 3</li>
</ul>
</div><br />
<div class="col-md-12">
<ul class="sortable1 connectedSortable">
<li class="ui-state-default">Item 4</li>
</ul>
</div><br />
<div class="col-md-12">
<ul class="sortable1 connectedSortable">
<li class="ui-state-default">Item 5</li>
</ul>
</div><br />
</div>
<!--Second Part-->
<div class="col-md-5">
<div class="col-md-12">
<ul class="sortable2 connectedSortable">
</ul>
</div>
<div class="col-md-12">
<ul class="sortable2 connectedSortable">
</ul>
</div>
<div class="col-md-12">
<ul class="sortable2 connectedSortable">
</ul>
</div>
<div class="col-md-12">
<ul class="sortable2 connectedSortable">
</ul>
</div>
<div class="col-md-12">
<ul class="sortable2 connectedSortable">
</ul>
</div>
</div>
Комментарии:
1. Просто идеально @gaetanoM. Похоже, это работает, позвольте мне протестировать его в конце и сообщить вам — Большое спасибо.