jQuery将元素拖动到可初始状态为隐藏的可排序列表中

Was*_*ace 2 css jquery draggable jquery-ui-sortable

我似乎无法将元素拖动到可初始状态为隐藏的可排序列表(即display:none).

每行的html如下所示:

<div class="dragbox" id="item1" >
  <h2>Expression 1<span id="exp1"></span></h2>
  <div class="dragbox-content" >
    <ul class="dragrow1"></ul>
    <ul class="dragrow2"></ul>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

但是为了使一个字段能够被放入'dragrow*',div'dragbox-content'必须具有'display:block'的样式.这可以用主css样式编写,也可以硬编码到div本身(例如).

麻烦的是,在页面加载时,你有点想要关闭所有行(或者至少除了一行之外).这意味着'display'应该最初设置为'none'.这部分很容易.一些jQuery可以在ready()事件中的页面加载时更改此css:

$('.dragbox')
.each(function(){
  $(this).find('.dragbox-content').hide();
});
Run Code Online (Sandbox Code Playgroud)

还有一个名为"toggle"的jQuery命令,当你单击h2标签时,会自动在block&none之间交换这个css显示.所以我可以显示或隐藏每一行.

因此......如果在ready()事件中显示了一行(display:block),则可以将项目拖动到可排序列表中(即使您在显示和隐藏行之间切换).

但是......如果在ready()事件中隐藏了一行(display:none),则无法将项目拖动到可排序列表中.

有任何想法吗?真的卡在这一个......

小智 5

这可能为时已晚,但这是解决方案(也许它可以帮助其他人).诀窍是你需要刷新可排序的.

$('.dragitem').draggable({
    start: function() {
        // show your dropzone
        $('#dropzone').show();

        // refresh your sortable -- so you can drop
        $('#dropzone').sortable('refresh');
    }
});
Run Code Online (Sandbox Code Playgroud)