Jquery 拖放可排序列表
Jquery Drag and Drop over sortable list
更新:对于寻求此类答案的任何人......以下答案是正确的。我已经用更正后的代码更新了 jsfiddle。
我创建了一个 jquery 拖放列表。基本上我可以将 "Fieldsets" 拖放到 div 中。然后我可以 reorder/sort 那些字段集。我希望能够将 "field" 拖放到已经在可排序 div 中的字段集中。必须将字段放入字段集中,而不是字段集的可排序列表(这占据了字段集的位置。
现在一切正常,除了字段不会附加到字段集中。首先,我将 Fieldset 1 拖到右侧的可排序 div 中。然后我将标题为 "Field One" 的图块拖到行 "Drop fields here!" 下方的 Fieldset 1 中。但是该字段不会附加到该字段集。
有人可以告诉我我做错了什么吗?
$(document).ready(function() {
$("#drop-area").droppable({
accept: '.ui-draggable:not(.draggableField)',
drop: function(event, ui) {
var clone = $(ui.draggable).clone()
clone.addClass('.connectedSortable')
clone.removeClass('.ui-draggable');
if (clone.hasClass('dropped')) {
return false;
}
clone.addClass('.connectedSortable').addClass('dropped');
$(this).append(clone);
}
});
$(".fieldDroppable").droppable({
// accept: '.draggableField:not(.ui-draggable)',
drop: function(event, ui) {
var clone = $(ui.draggable).clone()
$(this).append(clone);
}
});
$(".ui-draggable").draggable({
opacity: 1.0,
helper: 'clone',
revert: 'invalid'
});
$(".draggableField").draggable({
opacity: 1.0,
helper: 'clone',
revert: 'invalid'
});
$("#drop-area").sortable();
$("#drop-area").disableSelection();
});
$("#drop-area")
的更新代码:
$("#drop-area").droppable({
accept: '.ui-draggable:not(.draggableField)',
drop: function(event, ui) {
var clone = $(ui.draggable).clone()
clone.addClass('.connectedSortable')
clone.removeClass('.ui-draggable');
if (clone.hasClass('dropped')) {
return false;
}
clone.addClass('.connectedSortable').addClass('dropped');
$(this).append(clone);
var fieldsDroppable = $('#drop-area .ui-draggable:last-child .fieldDroppable');
fieldsDroppable.droppable({
drop: function(event, ui) {
var clone = $(ui.draggable).clone()
$(this).append(clone);
}
});
}
});
我添加了这部分:
var fieldsDroppable = $('#drop-area .ui-draggable:last-child .fieldDroppable');
fieldsDroppable.droppable({
drop: function(event, ui) {
var clone = $(ui.draggable).clone();
$(this).append(clone);
}
});
它之前不起作用的原因是,在将可放置元素添加到该黑色区域后,您不会 re-register jQuery 放置元素(字段集 + 字段)的事件,并且因为其中,它不允许将 "fields" 放入其中。
更新:对于寻求此类答案的任何人......以下答案是正确的。我已经用更正后的代码更新了 jsfiddle。
我创建了一个 jquery 拖放列表。基本上我可以将 "Fieldsets" 拖放到 div 中。然后我可以 reorder/sort 那些字段集。我希望能够将 "field" 拖放到已经在可排序 div 中的字段集中。必须将字段放入字段集中,而不是字段集的可排序列表(这占据了字段集的位置。
现在一切正常,除了字段不会附加到字段集中。首先,我将 Fieldset 1 拖到右侧的可排序 div 中。然后我将标题为 "Field One" 的图块拖到行 "Drop fields here!" 下方的 Fieldset 1 中。但是该字段不会附加到该字段集。
有人可以告诉我我做错了什么吗?
$(document).ready(function() {
$("#drop-area").droppable({
accept: '.ui-draggable:not(.draggableField)',
drop: function(event, ui) {
var clone = $(ui.draggable).clone()
clone.addClass('.connectedSortable')
clone.removeClass('.ui-draggable');
if (clone.hasClass('dropped')) {
return false;
}
clone.addClass('.connectedSortable').addClass('dropped');
$(this).append(clone);
}
});
$(".fieldDroppable").droppable({
// accept: '.draggableField:not(.ui-draggable)',
drop: function(event, ui) {
var clone = $(ui.draggable).clone()
$(this).append(clone);
}
});
$(".ui-draggable").draggable({
opacity: 1.0,
helper: 'clone',
revert: 'invalid'
});
$(".draggableField").draggable({
opacity: 1.0,
helper: 'clone',
revert: 'invalid'
});
$("#drop-area").sortable();
$("#drop-area").disableSelection();
});
$("#drop-area")
的更新代码:
$("#drop-area").droppable({
accept: '.ui-draggable:not(.draggableField)',
drop: function(event, ui) {
var clone = $(ui.draggable).clone()
clone.addClass('.connectedSortable')
clone.removeClass('.ui-draggable');
if (clone.hasClass('dropped')) {
return false;
}
clone.addClass('.connectedSortable').addClass('dropped');
$(this).append(clone);
var fieldsDroppable = $('#drop-area .ui-draggable:last-child .fieldDroppable');
fieldsDroppable.droppable({
drop: function(event, ui) {
var clone = $(ui.draggable).clone()
$(this).append(clone);
}
});
}
});
我添加了这部分:
var fieldsDroppable = $('#drop-area .ui-draggable:last-child .fieldDroppable');
fieldsDroppable.droppable({
drop: function(event, ui) {
var clone = $(ui.draggable).clone();
$(this).append(clone);
}
});
它之前不起作用的原因是,在将可放置元素添加到该黑色区域后,您不会 re-register jQuery 放置元素(字段集 + 字段)的事件,并且因为其中,它不允许将 "fields" 放入其中。