3

I am experiencing a weird sortable bug:

enter image description here

everytime I clicked on Manual, It will append() the Manual tab html, which is a sortable <ul><li></li> ... </ul> list

enter image description here

after that if I drag any <li> item ( Example Item 2 ), the dragged element left + top offset values are wrong the first time:

enter image description here

if the dragged element is moved vertically to another position or stopped draggin, it works as expected

enter image description here

this is the javascript code snippet for the sortable list:

var tab_html = '<ul id="featured-sortable">'+
    '  <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 1</li>'+
    '  <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 2</li>'+
    '  <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 3</li>'+
    '  <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 4</li>'+
    '  <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 5</li>'+
    '  <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 6</li>'+
    '  <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 7</li>'+
    '</ul>';


// Append New Last Child
$(this).closest('div.setting-item').append(tab_html);

/*
|==========================================================================
| Featured sortable
|==========================================================================
*/
$( function() {

    $( "#featured-sortable" ).sortable({
        // cursorAt: { top: 0, left: 0 },
        start: function(e, ui)
        {
            console.log('ui.offset: ' + JSON.stringify(ui.offset, null, 2));
            console.log('ui.position: ' + JSON.stringify(ui.position, null, 2));
            console.log('ui.originalPosition: ' + JSON.stringify(ui.originalPosition, null, 2));

            let target = $( event.target );

            console.log('target.css(top): ' + target.css('top'));
            console.log('target.css(left): ' + target.css('left'));

        },
        sort: function(e, ui)
        {
            let target = $( event.target );

            console.log('target.css(top): ' + target.css('top'));
            console.log('target.css(left): ' + target.css('left'));

            // ui.originalPosition.top = target.css('top');
            // ui.originalPosition.left = target.css('left');
        }
    }).disableSelection();


} );

// Refresh Featured-Sortable
$( "#featured-sortable" ).sortable( "refresh" );
yelnn
  • 73
  • 7

1 Answers1

1

For me this was fixed by adding

position: relative;
overflow: auto;

on the parent element. See here for a similar issue

Barış Uşaklı
  • 13,440
  • 7
  • 40
  • 66