jQuery UI Droppable - 根据保存的列表显示默认元素(并添加额外的拖放区)
jQuery UI Droppable - Show default elements based on saved list (& add extra drop zones)
我当前设置的完整 JSFiddle:https://jsfiddle.net/w27g3xp2/1/
您会看到有一个带有一些预定义值的输入框。目标是根据字段中的输入创建和定位 4 个可放置元素,以便它们显示在下拉框中。目前,当我从列表中拖放一个元素时,输入字段被完全清除。
另一个挑战是“+”,它成功地添加了额外的拖放区,但这些区域没有注册为 "droppable" 区,因此它们目前没有用。非常感谢任何指示、提示或文档。
代码:
$(".social-msl-link-label").draggable({
connectToSortable: ".social-msl-group-list",
revert: "invalid",
helper: "clone"
});
var orderMSLids = [];
$(".social-msl-links-order li.social-msl-drop").droppable({
accept: ".social-msl-link-label",
tolerance: 'pointer',
greedy: true,
hoverClass: 'highlight',
drop: function(ev, ui) {
orderMSLids = [];
$(ui.draggable).clone(true).detach().css({
position: 'relative',
top: 'auto',
left: 'auto'
}).appendTo(this);
orderMSLids.push($(this).find('.social-msl-link-label').attr('id'));
$(this).siblings().filter(function() {
return $(this).html().trim() === $(ui.draggable).html().trim();
}).empty();
// edited
str = [];
$(".social-msl-links-order li").each(function( index ) {
//console.log( index + ": " + $( this ).children().attr('id') );
var res = $( this ).children().attr('id');
if (res) {
str.push(res);
}
});
var string = str.join(",");
console.log(string);
$('#msl-order').val(string);
}
});
$('.social-msl-add').click(function() {
$('<li class="social-msl-drop"></li>').insertBefore('.social-msl-add');
});
对于您的第一个问题,您可以简单地检索 #msl-order
元素的 value
属性,根据 ,
分隔符拆分值,迭代返回值,然后克隆相应的元素并将其附加到第一个空的可放置容器:
$('#msl-order').prop('value').split(',').forEach(function(id) {
var $droppable = $('.social-msl-drop.ui-droppable:empty').first();
if (id) {
$('.draggable #' + id).clone(true).appendTo($droppable);
}
});
对于第二期,您需要 re-initialize 可放置设置。在下面的示例中,我将初始可放置设置对象保存在名为 droppableOptions
的变量中,然后在插入新元素之前初始化这些选项:
$('.social-msl-add').click(function() {
var $droppable = $('<li class="social-msl-drop"></li>').droppable(droppableOptions);
$droppable.insertBefore('.social-msl-add');
});
我当前设置的完整 JSFiddle:https://jsfiddle.net/w27g3xp2/1/
您会看到有一个带有一些预定义值的输入框。目标是根据字段中的输入创建和定位 4 个可放置元素,以便它们显示在下拉框中。目前,当我从列表中拖放一个元素时,输入字段被完全清除。
另一个挑战是“+”,它成功地添加了额外的拖放区,但这些区域没有注册为 "droppable" 区,因此它们目前没有用。非常感谢任何指示、提示或文档。
代码:
$(".social-msl-link-label").draggable({
connectToSortable: ".social-msl-group-list",
revert: "invalid",
helper: "clone"
});
var orderMSLids = [];
$(".social-msl-links-order li.social-msl-drop").droppable({
accept: ".social-msl-link-label",
tolerance: 'pointer',
greedy: true,
hoverClass: 'highlight',
drop: function(ev, ui) {
orderMSLids = [];
$(ui.draggable).clone(true).detach().css({
position: 'relative',
top: 'auto',
left: 'auto'
}).appendTo(this);
orderMSLids.push($(this).find('.social-msl-link-label').attr('id'));
$(this).siblings().filter(function() {
return $(this).html().trim() === $(ui.draggable).html().trim();
}).empty();
// edited
str = [];
$(".social-msl-links-order li").each(function( index ) {
//console.log( index + ": " + $( this ).children().attr('id') );
var res = $( this ).children().attr('id');
if (res) {
str.push(res);
}
});
var string = str.join(",");
console.log(string);
$('#msl-order').val(string);
}
});
$('.social-msl-add').click(function() {
$('<li class="social-msl-drop"></li>').insertBefore('.social-msl-add');
});
对于您的第一个问题,您可以简单地检索 #msl-order
元素的 value
属性,根据 ,
分隔符拆分值,迭代返回值,然后克隆相应的元素并将其附加到第一个空的可放置容器:
$('#msl-order').prop('value').split(',').forEach(function(id) {
var $droppable = $('.social-msl-drop.ui-droppable:empty').first();
if (id) {
$('.draggable #' + id).clone(true).appendTo($droppable);
}
});
对于第二期,您需要 re-initialize 可放置设置。在下面的示例中,我将初始可放置设置对象保存在名为 droppableOptions
的变量中,然后在插入新元素之前初始化这些选项:
$('.social-msl-add').click(function() {
var $droppable = $('<li class="social-msl-drop"></li>').droppable(droppableOptions);
$droppable.insertBefore('.social-msl-add');
});