#javascript #jquery #jquery-ui-sortable
#javascript #jquery #jquery-ui-сортируемый
Вопрос:
Я хотел создать сортируемый список перетаскивания и по кнопке — сравните его с фактически правильным порядком (представьте это как шаги, которые вам нужно предпринять, чтобы завершить задачу X). Для этого я использовал идентификаторы списков (самый простой подход для меня).
$(function() {
$("#sortable").sortable({
scroll: false,
placeholder: "ui-state-highlight"
});
$("#sortable").disableSelection();
});
function checkOrd() {
var items = $('#sortable li').map(function() {
return $.trim($(this).attr('id'));
}).get();
var itsort = $('#sortable li').map(function() {
return $.trim($(this).attr('id'));
}).get();
console.log(items);
console.log(itsort);
itsort.sort();
if (JSON.stringify(items) == JSON.stringify(itsort)) {
console.log('good!');
} else {
console.log('wrong!');
}
};
.ui-state-correct {
font-weight: bold;
color: #8bd333;
}
<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.min.js"></script>
<ul id="sortable">
<li id="dd01" class="ui-state-default">1.</li>
<li id="dd02" class="ui-state-default">2.</li>
<li id="dd03" class="ui-state-default">3.</li>
<li id="dd04" class="ui-state-default">4.</li>
<li id="dd05" class="ui-state-default">5.</li>
<li id="dd06" class="ui-state-default">6.</li>
<li id="dd07" class="ui-state-default">7.</li>
</ul>
<p class="check">
</p>
<button onclick="checkOrd();">check</button>
Итак, как вы можете видеть, я получил часть, выполнив список D amp; D и проверив, все ли на месте. Чего я также хочу, так это:
- Если общий порядок неправильный, я бы хотел добавить class(«ui-state-correct») к правильно упорядоченным элементам. Например, правильный порядок, очевидно, равен 1,2,3, и если пользователь нажимает кнопку, а его порядок равен 1,3,2 — я бы хотел добавить класс «ui-state-correct» к элементу с идентификатором dd01.
- В противном случае — поскольку пользователь может проверять порядок несколько раз, я бы хотел удалить класс «ui-state-correct», если он ошибается с правильным ответом 🙂
https://jsfiddle.net/mjro3vba/3 / скрипка для удобства 🙂
Ответ №1:
Вы можете сравнивать items
значения массива и itsort
массива, если значение одинаково в данной позиции, просто добавьте class к своему li
i.e: $("#" value).addClass("ui-state-correct")
и вы можете удалять эти добавленные классы всякий раз, когда сортировка начинается снова.
Демонстрационный код :
$(function() {
$("#sortable").sortable({
scroll: false,
placeholder: "ui-state-highlight",
start: function(event, ui) {
//remove class whenever sortable start again
$("#sortable li").removeClass("ui-state-correct")
}
});
$("#sortable").disableSelection();
});
function checkOrd() {
var items = $('#sortable li').map(function() {
return $.trim($(this).attr('id'));
}).get();
var itsort = $('#sortable li').map(function() {
return $.trim($(this).attr('id'));
}).get();
itsort.sort();
//loop through array
$(items).each(function(index, value) {
//check if both array have same at given position
if (value == itsort[index]) {
//add class there
$("#" value).addClass("ui-state-correct")
}
})
if (JSON.stringify(items) == JSON.stringify(itsort)) {
console.log('good!');
$(".check").text("good");
} else {
console.log('wrong!');
$(".check").text("wrong");
}
};
.ui-state-correct {
color: green;
}
<head>
<script src="https://code.jquery.com/jquery-3.4.1.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
</head>
<ul id="sortable">
<li id="dd01" class="ui-state-default">1.</li>
<li id="dd02" class="ui-state-default">2.</li>
<li id="dd03" class="ui-state-default">3.</li>
<li id="dd04" class="ui-state-default">4.</li>
<li id="dd05" class="ui-state-default">5.</li>
<li id="dd06" class="ui-state-default">6.</li>
<li id="dd07" class="ui-state-default">7.</li>
</ul>
<p class="check">
</p>
<button onclick="checkOrd();">check</button>
Комментарии:
1. Привет, @Swati, спасибо за ваш ответ 🙂 Кажется, что ваш подход выполняет свою работу. Это делает почти именно то, что я хочу 🙂 Я предполагаю, что удаление класса только при изменении положения элемента перетаскивания немного сложно?
2. Может быть, так, когда вам нужно удалить этот класс? Дайте мне знать, что тогда я обновлю свой ответ.
3. Хорошо, поэтому я думаю, что, возможно, возможно, что после проверки () правильные «ответы» становятся зелеными, и когда вы снова перетаскиваете неправильный ответ и не касаетесь порядка правильного ответа (например, 1,2, 6,7 правильные и 5,3,4 неправильные), правильные остаются зелеными. Например, я меняю 3 на 5, а затем 4 на 5 — я не трогал правильные. Могут ли они оставаться зелеными?
4. Есть событие остановки , вы можете написать эту логику внутри этого метода, попробуйте сами, если все еще это не работает, дайте мне знать.