我有两个连接列表,每个列表都位于Jquery UI选项卡中。我希望通过选项卡连接列表,以便将 li 元素从一个 ul 列表拖放到选项卡名称上,然后添加 li 元素到目标 ul 列表。
我已经能够使用connect lists through tabs Jquery tutorial的JQuery实现这一点,但是我无法在 drop 事件中构建我需要的回调函数。
回调需要(a)识别可拖动项的id,(b)基于哪个droppable选项卡被删除的目标列表,以及(c)通过GET / POST将两者发送到PHP脚本将进行数据库交互(将项目从一个数据库表移动到另一个数据库表)。
这是我到目前为止使用的JQuery(第一部分处理 sortable1 和 sortable2 的内部排序):
$(function() {
$("#sortable1").sortable({
items: 'li:not(.ui-state-disabled)',
opacity: 0.6,
cursor: 'move',
connectWith: '.connectedSortable',
update: function() {
var order1 = $(this).sortable("serialize");
$.get("updatedb.php?p=masterlist", order1, function(data){
});
},
});
$("#sortable2").sortable({
items: 'li:not(.ui-state-disabled)',
opacity: 0.6,
cursor: 'move',
connectWith: '.connectedSortable',
update: function() {
var order2 = $(this).sortable("serialize");
$.get("updatedb.php?p=offline", order2, function(data){
});
},
});
var $tabs = $( "#tabs" ).tabs();
$("#tabs").droppable({
accept: ".connectedSortable li",
drop: function(ev, ui) {
}
});
(即使回调也是空的,因为到目前为止我的尝试都没有。)
以下是列表的html输出:
<div id="tabs">
<ul>
<li><a href="#tabs-1">Tab 1</a></li>
<li><a href="#tabs-2">Tab 2</a></li>
</ul>
<div id="tabs-1">
<ul id="sortable1" class="connectedSortable ui-helper-reset">
<li class="ui-state-default">Item 1</li>
<li class="ui-state-default">Item 2</li>
<li class="ui-state-default">Item 3</li>
<li class="ui-state-default">Item 4</li>
<li class="ui-state-default">Item 5</li>
</ul>
</div>
<div id="tabs-2">
<ul id="sortable2" class="connectedSortable ui-helper-reset">
<li class="ui-state-highlight">Item 1</li>
<li class="ui-state-highlight">Item 2</li>
<li class="ui-state-highlight">Item 3</li>
<li class="ui-state-highlight">Item 4</li>
<li class="ui-state-highlight">Item 5</li>
</ul>
</div>
</div>
对此问题的任何帮助将不胜感激。感谢。
编辑:
解决,像这样:
var $tab_items = $( "ul:first li", $tabs ).droppable({
accept: ".connectedSortable li",
hoverClass: "ui-state-hover",
drop: function( event, ui ) {
var $id = ui.draggable.attr('id');
var $item = $( this );
var $list = $( $item.find( "a" ).attr( "href" ) )
.find( ".connectedSortable" );
ui.draggable.hide( "fast", function() {
$tabs.tabs( "select", $tab_items.index( $item ) );
$( this ).appendTo( $list ).show( "fast" );
});
var $listname = $list.attr('id');
$.get("tester.php", {list:$listname, id:$id}, function(data){
});
}
});
});
答案 0 :(得分:0)
伟大的解决方案。我也找不到拖动元素的值。除了这个问题,我必须让sortable函数接受动态生成的未知数量的列表。这可能对访问此问题的人有用。
var num_lists = $('[id^=tabs-]').length;
for(i=1;i<=num_lists;i++){
$("#sortable"+i).sortable().disableSelection();
}