jQuery UI 可在列表之间排序和移动元素
jQuery UI Sortable and moving elements between lists
我想从列表中抓取项目并将它们拖到其他空白列表中。
这是HTML结构:
<div class="structure">
<div id="row1" class="connected"></div>
<div id="row2" class="connected">
<div class="item">Item 1</div>
</div>
<div id="row3" class="connected"></div>
<div id="row4" class="connected">
<div class="item">Item 2a</div>
<div class="item">Item 2b</div>
<div class="item">Item 2c</div>
</div>
<div id="row5" class="connected"></div>
<div id="row6" class="connected">
<div class="item">Item 3a</div>
<div class="item">Item 3b</div>
</div>
<div id="row7" class="connected"></div>
</div>
有空 <ul>
可以放置任何项目。之后它会创建新的空 <ul>
前后拖动其他项目。
这是我的javascript
$( function() {
$(".structure div").sortable({
placeholder: "ui-state-highlight",
connectWith: ".connected",
items: "> div",
receive: function (event, ui) {
var targetRowID = $(this).attr("id");
var itemsTargetRow = $("#"+ targetRowID +" .item").length;
if( itemsTargetRow == 1 ) {
function uniqueID() {
return Math.random().toString(36).substr(2, 5);
};
$("#"+ targetRowID)
.before('<div id="row'+ uniqueID() +'" class="connected"></div>')
.after('<div id="row'+ uniqueID() +'" class="connected"></div>');
}
},
stop: function (event, ui) {
var fromRow = $(this).attr("id");
var isRowEmpty = $("#"+ fromRow +" .item").length;
if( isRowEmpty == 0 )
{
$("#"+ fromRow).next().remove();
$("#"+ fromRow).remove();
}
}
}).disableSelection();
});
问题:
当我将一个项目拖放到一个空列表时,我无法再将该项目拖到其他任何地方。
有什么想法吗?
好的,这是你的问题
JQuery 从页面加载开始,找到 'connect' 的所有区域。当你添加更多的 div 时 JQuery 没有意识到有新的区域允许拖放。
解决方案?你需要刷新你的 JQuery,像这样:
var refresh = function(){
$( function() {
$(".structure div").sortable({
placeholder: "ui-state-highlight",
connectWith: ".connected",
items: "> div",
receive: function (event, ui) {
var targetRowID = $(this).attr("id");
var itemsTargetRow = $("#"+ targetRowID +" .item").length;
if( itemsTargetRow == 1 ) {
function uniqueID() {
return Math.random().toString(36).substr(2, 5);
};
$("#"+ targetRowID)
.before('<div id="row'+ uniqueID() +'" class="connected"></div>')
.after('<div id="row'+ uniqueID() +'" class="connected"></div>');
refresh();
}
},
stop: function (event, ui) {
var fromRow = $(this).attr("id");
var isRowEmpty = $("#"+ fromRow +" .item").length;
if( isRowEmpty == 0 )
{
$("#"+ fromRow).next().remove();
$("#"+ fromRow).remove();
}
}
}).disableSelection();
});
}
这是一个正在进行的工作示例:
http://codepen.io/nilestanner/pen/grJJmJ
您还可以查看此答案以获得更多帮助:
Refresh list after adding an item with jQuery UI sortable plugin
我想从列表中抓取项目并将它们拖到其他空白列表中。
这是HTML结构:
<div class="structure">
<div id="row1" class="connected"></div>
<div id="row2" class="connected">
<div class="item">Item 1</div>
</div>
<div id="row3" class="connected"></div>
<div id="row4" class="connected">
<div class="item">Item 2a</div>
<div class="item">Item 2b</div>
<div class="item">Item 2c</div>
</div>
<div id="row5" class="connected"></div>
<div id="row6" class="connected">
<div class="item">Item 3a</div>
<div class="item">Item 3b</div>
</div>
<div id="row7" class="connected"></div>
</div>
有空 <ul>
可以放置任何项目。之后它会创建新的空 <ul>
前后拖动其他项目。
这是我的javascript
$( function() {
$(".structure div").sortable({
placeholder: "ui-state-highlight",
connectWith: ".connected",
items: "> div",
receive: function (event, ui) {
var targetRowID = $(this).attr("id");
var itemsTargetRow = $("#"+ targetRowID +" .item").length;
if( itemsTargetRow == 1 ) {
function uniqueID() {
return Math.random().toString(36).substr(2, 5);
};
$("#"+ targetRowID)
.before('<div id="row'+ uniqueID() +'" class="connected"></div>')
.after('<div id="row'+ uniqueID() +'" class="connected"></div>');
}
},
stop: function (event, ui) {
var fromRow = $(this).attr("id");
var isRowEmpty = $("#"+ fromRow +" .item").length;
if( isRowEmpty == 0 )
{
$("#"+ fromRow).next().remove();
$("#"+ fromRow).remove();
}
}
}).disableSelection();
});
问题:
当我将一个项目拖放到一个空列表时,我无法再将该项目拖到其他任何地方。
有什么想法吗?
好的,这是你的问题
JQuery 从页面加载开始,找到 'connect' 的所有区域。当你添加更多的 div 时 JQuery 没有意识到有新的区域允许拖放。
解决方案?你需要刷新你的 JQuery,像这样:
var refresh = function(){
$( function() {
$(".structure div").sortable({
placeholder: "ui-state-highlight",
connectWith: ".connected",
items: "> div",
receive: function (event, ui) {
var targetRowID = $(this).attr("id");
var itemsTargetRow = $("#"+ targetRowID +" .item").length;
if( itemsTargetRow == 1 ) {
function uniqueID() {
return Math.random().toString(36).substr(2, 5);
};
$("#"+ targetRowID)
.before('<div id="row'+ uniqueID() +'" class="connected"></div>')
.after('<div id="row'+ uniqueID() +'" class="connected"></div>');
refresh();
}
},
stop: function (event, ui) {
var fromRow = $(this).attr("id");
var isRowEmpty = $("#"+ fromRow +" .item").length;
if( isRowEmpty == 0 )
{
$("#"+ fromRow).next().remove();
$("#"+ fromRow).remove();
}
}
}).disableSelection();
});
}
这是一个正在进行的工作示例: http://codepen.io/nilestanner/pen/grJJmJ
您还可以查看此答案以获得更多帮助: Refresh list after adding an item with jQuery UI sortable plugin