Help needed in jQueryUI code (tab+sortable+droppable+draggable)
I'm working on a project and I've designed a "Connected Tabs" interface, based on jQuery-UI's demo pages for:
- Sortable - Connected Lists
- Droppable - Shopping Cart
- Draggable - jQuery UI Draggable + Sortable
- Tabs - Sortable
The (visual) part I'm struggling with is as following:
After re-ordering any Tab the visual effect hide/show Tab does not seem to work on a "drop" action.
If the Tab order is re-arranged in the original order, the visual effect works as designed and as expected.
The issue might be somewhere in line #37 handling the (new) tab index.
The (Ajax) Post information is correct in any circumstance.
Has anyone an idea how to solve this nuisance? Thanks.
- <script type="text/javascript">
- $(function () {
- $(" #sortable0, #sortable1")
- .sortable({
- update: function (event, ui) {
- var $parent = $(this).parent().attr("pid");
- var newOrder = $(this).sortable("toArray").toString();
- $.post('/Controller/sortable/', { parent: $parent, childs: newOrder })
- .fail(function () { alert("error"); });
- // console.log( id + ':' + newOrder );
- },
- cancel: ".ui-state-disabled"
- })
- .disableSelection();
- var $tabs = $("#tabs").tabs();
- var $tabs_items = $("#tabs .ui-tabs-nav").sortable({
- axis: 'x',
- stop: function () {
- $tabs.tabs("refresh");
- },
- update: function (event, ui) {
- var data = $("#tabs .ui-tabs-nav").sortable('toArray').toString();
- $.post('/Controller/sortable/', { order: data })
- .fail(function () { alert("error"); });
- // console.log( 'order: ' + data );
- }
- });
- var $tab_items = $("ul:first li", $tabs).droppable({
- accept: ".connectedSortable li",
- hoverClass: "ui-state-hover",
- drop: function (event, ui) {
- var $item = $(this);
- var $parent = $(this).find("a").attr('id');
- var $list = $($item.find("a").attr("href")).find(".connectedSortable");
- ui.draggable.hide("slow", function () {
- $tabs.tabs("option", "active", $tab_items.index($item));
- $(this).appendTo($list).show("slow");
- $.post('/Controller/droppable/', {
- child: $(this).attr('id'),
- parent: $parent
- })
- .fail(function () { alert("error"); });
- // console.log( $(this).attr('id') + ":" + $parent );
- });
- }
- });
- });
- </script>
// HTML from here
<div style="clear:both;"></div>
<div id="tabs">
<ul>
<li id="0"><a href="#tabs-0" id="0"><font class="">Books</font></a></li>
<li id="1"><a href="#tabs-1" id="1"><font class="">Movies</font></a></li>
< /ul>
<div id="tabs-0" pid="0">
<ul id="sortable0" class="connectedSortable ui-helper-reset">
<li class="ui-state-default" id="42">Adams</li>
</ul>
</div><!-- tabs-0 -->
< div id="tabs-1" pid="1">
<ul id="sortable1" class="connectedSortable ui-helper-reset">
<li class="ui-state-default" id="1984">Orwell</li>
</ul>
</div><!-- tabs-1 -->
</div><!-- tabs -->