You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jQuery Sortable子项拖拽update事件重复触发问题求助

问题原因

当使用connectWith关联多个可排序容器时,拖拽子元素从一个容器移动到另一个容器时,两个容器都会触发update事件:

  • 原容器因元素被移除触发一次
  • 目标容器因元素被添加触发一次
    这就是alert弹出两次的核心原因。stopPropagation()和preventDefault()无法解决该问题,因为这是jQuery UI Sortable的设计逻辑,并非事件冒泡导致。
解决方案

以下两种常用方式可解决该问题,按需选择:

方法一:通过ui.sender判断触发容器

ui.sender指向元素被拖拽出的原容器,若当前容器是目标容器,ui.sender会返回undefined。我们可以只在目标容器触发时执行代码:

$(".group-items").sortable({
    containment: "document",
    items: ".group-item",
    placeholder: "item-placeholder",
    connectWith: '.group-items',
    update: function(event, ui) {
        // 仅在目标容器触发时执行操作
        if (!ui.sender) {
            alert('ok');
        }
    }
});

方法二:改用stop事件替代update

stop事件在拖拽操作完全结束时仅触发一次,不管元素是否在不同容器间移动:

$(".group-items").sortable({
    containment: "document",
    items: ".group-item",
    placeholder: "item-placeholder",
    connectWith: '.group-items',
    stop: function(event, ui) {
        alert('ok');
    }
});

内容的提问来源于stack exchange,提问作者sami eisa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 17:30:13