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

jQuery UI 新追加category类li无法作为droppable接收subcategory拖拽问题

问题根因

页面加载阶段执行的droppable绑定只会作用于当时已经存在的.category元素,后续动态新增的category DOM节点没有经过droppable初始化,因此无法接收subcategory的拖拽投放。

解决方案

1. 抽离公共的droppable初始化方法

将category的droppable配置抽为可重复调用的公共函数,避免重复代码,同时支持对单个新增元素初始化:

// 初始化category的droppable能力,支持传入指定元素,默认初始化所有未绑定的category
function initCategoryDroppable(targetEl) {
  const $target = $(targetEl || '.category:not(.ui-droppable)');
  $target.droppable({
    accept: '.subcategory, .category',
    // 保留你原来的其他droppable配置,比如hoverClass、tolerance等
    drop: function (event, ui) {
      const $dragEl = ui.draggable;
      // 区分拖拽元素类型处理投放逻辑
      if ($dragEl.hasClass('subcategory')) {
        // subcategory投放进当前category的子列表
        const $newSub = $dragEl.clone(true)
          .removeClass('ui-draggable ui-draggable-handle')
          .addClass('ui-state-highlight');
        // 没有子ol则先创建
        if ($(this).children('ol').length === 0) {
          $(this).append('<ol></ol>');
        }
        $(this).children('ol').append($newSub);
      } else if ($dragEl.hasClass('category')) {
        // category投放进根列表
        const $newCat = $dragEl.clone(true)
          .removeClass('ui-draggable ui-draggable-handle')
          .addClass('ui-state-highlight');
        $('.list').append($newCat);
        // 关键:给新增的category初始化droppable能力
        initCategoryDroppable($newCat);
      }
    }
  });
}

2. 页面初始化时调用方法

页面加载完成后,先给已存在的category初始化droppable:

$(function () {
  // 初始化已有的category
  initCategoryDroppable();
  // 你原来的draggable初始化逻辑保持不变
  $('.drag-source .category, .drag-source .subcategory').draggable({
    helper: 'clone',
    // 其他draggable配置保持不变
  });
});

关键说明

  • clone(true)只能克隆原生DOM绑定的事件,不会继承jQuery UI的droppable/draggable实例,所以新增的category必须手动调用初始化方法
  • 选择器加了:not(.ui-droppable)过滤,避免重复初始化已经绑定过能力的元素,防止事件冲突
  • 投放逻辑需要区分拖拽元素类型,不要全部append到根列表,否则subcategory无法挂载到对应category下

内容的提问来源于stack exchange,提问作者Ozzie Ghani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 11:36:05