jQuery UI - 在 DOM 中移动可放置元素

标签 jquery jquery-ui

我试图通过中间可放置元素将两个可排序元素绑定(bind)在一起。但是,我似乎无法通过通常的appendTo方法从droppable.drop事件内部移动DOM中的可拖动对象。

这个想法是将一个项目从可排序项拖到与可排序项共享相同 data-tabid 属性的可转换项上,并使该项目出现在相应的可排序项中。但是,可拖动对象将返回到其在原始可排序对象中的位置,并且不会移动到新的可排序对象中。

我在这里遗漏了什么吗?或者有更简单的方法来实现这一目标吗?

HTML:

<div class="tab" data-tabid="10">Tab 1</div>
<div class="tab" data-tabid="20">Tab 2</div>

<div class="area" data-tabid="10">
    <div class="widget" data-id="1">Widget 1</div>
    <div class="widget" data-id="2">Widget 2</div>
    <div class="widget" data-id="3">Widget 3</div>
</div>

<div class="area" data-tabid="20">
    <div class="widget" data-id="4">Widget 4</div>
    <div class="widget" data-id="5">Widget 5</div>
    <div class="widget" data-id="6">Widget 6</div>
</div>

脚本:

$('.tab').droppable({
    accept: '.widget',
    hoverClass: 'drop-hover',
    drop: function(event, ui) {
        var widgetid = ui.draggable.data('id');
        var tabid = $(event.target).data('tabid');
        console.log('widgetid: ' + widgetid + '; tabid: ' + tabid);

        var targetarea = $('.area[data-tabid="' + tabid + '"]');
        console.log('put widget:');
        console.log(ui.draggable);
        console.log('in area:');
        console.log(targetarea);

        ui.draggable.appendTo(targetarea);

        console.log('---=== end drop ===---');
    }
});

$('.area').sortable({
    items: '.widget'
});

JSFiddle

最佳答案

我认为在成功进行放置尝试之后,放置事件触发得太快,因此检测到放置事件,但在放置实际发生之前。

如果你改变

ui.draggable.appendTo(targetarea);

setTimeout(function() {ui.draggable.appendTo(targetarea);},0);

有效

关于jQuery UI - 在 DOM 中移动可放置元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31015115/

相关文章:

jquery - 从 JSON 文件检索数据并在图库中显示图像

javascript - jQuery 自动完成不显示所有匹配项

javascript - jquery UI 自动完成的延迟初始化

javascript - 如何获取draggable中droppable的id?

javascript - 如何为大量 HTML 元素优化 jQuery 函数

jQuery - 如果有两个类 - 获取第一个

jquery - bpopup 不工作 + 在页面加载时显示

javascript - 如何为ajax加载的内容注册点击事件

jquery - div 与窗口相关的顶部位置

javascript - 用于 Highcharts 散点图的自定义标记(带圆 Angular 的矩形)