Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

jQuery sortable doesn't work correctly with horizontal list if list is empty before init

If I add elements to list after I initialize .sortable it doesn't work correctly.

See example jsFiddle

Sample HTML:

<div class="container">
</div>
<br />
<button class="add-fields">add</button>

Sample JS:

$(".container").sortable({
    containment: 'parent'   
});

$(".container").disableSelection();

$(".add-fields").click(function(){
    $(".container").append("<div>sucke</div>")   
})

Sample CSS:

.container {
    height: 30px;
    width: 100%;
    background: blue;
    position: relative;
    float: left;
}
.container > div {
    position: relative;
    float: left;
    height: 100%;
    width: 80px;
    background-color: red;
    line-height: 30px;
    text-align: center;
    margin: 0;
    padding: 0;
    cursor: default;
}

UPDATE

I found related issue here http://bugs.jqueryui.com/ticket/7498

because this.floating is only determined in _create, if you start with an empty sortable it is assumed to be vertical.

like image 883
skmasq Avatar asked Oct 01 '13 01:10

skmasq


1 Answers

The workaround for that jQueryUI bug is to initialize the sortable with an element inside, then remove it immediately after initialization.

HTML:

<div class="container"><div id="test">blah</div>
</div>
<br />
<button class="add-fields">add</button>

Javascript:

var i = 0;

$(".container").sortable({
    containment: 'parent'   
});
$(".container").disableSelection();
$("#test").remove();

$(".add-fields").click(function(){
    $(".container").append("<div>sucke" + (i++) + "</div>")   
})

And a jsFiddle showing it working.

like image 178
Ken Herbert Avatar answered Nov 15 '22 04:11

Ken Herbert