如果list在init之前为空,则jQuery sortable与水平列表无法正常工作

skm*_*asq 9 javascript jquery jquery-ui jquery-ui-sortable

如果我在初始化后将元素添加到列表中.sortable,则无法正常工作.

参见示例jsFiddle

示例HTML:

<div class="container">
</div>
<br />
<button class="add-fields">add</button>
Run Code Online (Sandbox Code Playgroud)

示例JS:

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

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

$(".add-fields").click(function(){
    $(".container").append("<div>sucke</div>")   
})
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

UPDATE

我在http://bugs.jqueryui.com/ticket/7498找到了相关问题

因为this.floating仅在_create中确定,如果以空的sortable开头,则假定它是垂直的.

Ken*_*ert 6

该jQueryUI错误的解决方法是使用内部元素初始化sortable,然后在初始化后立即将其删除.

HTML:

<div class="container"><div id="test">blah</div>
</div>
<br />
<button class="add-fields">add</button>
Run Code Online (Sandbox Code Playgroud)

使用Javascript:

var i = 0;

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

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

并且jsFiddle显示它正常工作.