jquery sortable - исключить отдельный элемент в списке из того, чтобы быть связанным с другими списками, будучи сортируемым в его собственном списке
Я ищу это с прошлой пятницы, не мог найти никакого решения. Одна вещь, о которой я подумал и несколько раз попробовал, - это сначала создать функцию, где ВСЕ элементы в списке, содержащие этот элемент, которые на самом деле должны быть исключены из других списков, могут быть перемещены в этом списке, и позже построение другой функции, где ВСЕ элементы готовятся к перемещению в другие списки, но один определенный элемент исключается из этого.
но кажется, что вы не можете написать две функции для одного списка с помощью jquery или это возможно?
во всяком случае, мой запрос на самом деле лучше всего описан в заголовке, хотя я до сих пор не смог найти никакого решения. У кого-нибудь есть идеи, как это решить?
С уважением, Мащек
РЕДАКТИРОВАТЬ:
Вот некоторый код:
$("#tx-sortable2").sortable({
items: \'li:not(.tx-header)\',
connectWith: \'#tx-sortable2,#tx-sortable3\',
helper: \'clone\',
opacity: 0.6,
forceHelperSize: true,
placeholder: \'tx-highlight\',
revert: \'invalid\',
update: function() {
var order = $(this).sortable("serialize") + \'&action=bla=blubb\';
$.ajax({
url: \'index.php?bla=blubb\',
type: \'POST\',
data: order,
timeout: 50000,
beforeSend: function() {
$("#tx-response").show();
$("#tx-response").fadeOut(2000);
}
});
}
В этом примере все li-элементы в #tx-sortable2 могут быть перемещены в списки #tx-sortable3 и в сам список #tx-sortable2, вот что означает connectWith. Опять же, мой вопрос: как сделать один li-элемент сортируемым в его собственном списке (здесь #tx-sortable2), но предотвратить его перетаскивание в другой список?
2 ответа
Вы можете вызвать событие отмены, когда исключенный элемент будет перемещен в связанный список. Просто дайте исключенному элементу какой-то особый атрибут (класс).
Что-то в строю.
HTML
<ul id="tx-sortable2">
<li>Element2_1</li>
<li class="excluded">Element2_2</li>
<li>Element2_3</li>
<li>Element2_4</li>
</ul>
<ul id="tx-sortable3">
<li>Element3_1</li>
<li>Element3_2</li>
<li>Element3_3</li>
<li>Element3_4</li>
</ul>
JS
$("#tx-sortable2").sortable({
connectWith: '#tx-sortable3',
over: function(){
if($(ui.item.hasClass('excluded')){
$(ui.sender).sortable('cancel');
}
});
Я думаю, что вы можете использовать собственную опцию jQuery UI под названием Axis. Он указывает направление, в котором элемент может быть перемещен. Поэтому, если остальные ваши списки находятся справа или слева, вы можете установить для оси значение 'y', чтобы вы не могли перемещать их по горизонтали. Тогда у вас будет список, в котором вы сможете отсортировать элементы в этом списке, но вы не сможете связать его с другими списками.