You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何禁用可拖拽div?拖拽A后其他div禁用但E失效求助

解决拖拽A放置后无法禁用E的问题

嘿,我明白你现在的困扰——把A拖到目标区域后,B、C、D都乖乖被禁用不能拖拽了,可E却还能正常拖动,这确实挺闹心的。我帮你梳理下可能的问题点和解决办法:

先排查核心原因

大概率是你的禁用逻辑没有正确覆盖到E元素,常见的情况有两种:

  1. 选择器没包含E:比如你用的选择器是$('.draggable:not(#A)'),但E的class不是draggable,或者id拼写有误,导致E没被选中执行禁用操作;
  2. E的拖拽初始化有特殊配置:如果E初始化拖拽时用了一些特殊参数(比如自定义的cancel规则、或者绑定了额外的拖拽事件),可能会让draggable('disable')的默认效果失效。

给出修正方案

先给你一个稳当的写法,确保所有非A的可拖拽元素都被禁用:

步骤1:统一可拖拽元素的标识

给A、B、C、D、E都加上同一个类名,比如draggable-item,这样选择起来更方便,避免遗漏:

<div id="A" class="draggable-item">A</div>
<div id="B" class="draggable-item">B</div>
<div id="C" class="draggable-item">C</div>
<div id="D" class="draggable-item">D</div>
<div id="E" class="draggable-item">E</div>

步骤2:修正禁用逻辑

在A的放置回调里,明确选中所有draggable-item类的元素,排除A后执行禁用:

$('#droppable').droppable({
  drop: function(event, ui) {
    // 确认被拖拽的是A
    if (ui.draggable.attr('id') === 'A') {
      // 禁用所有其他可拖拽元素
      $('.draggable-item').not('#A').draggable('disable');
    }
  }
});

步骤3:检查E的初始化代码

确保E的拖拽初始化是标准写法,没有冲突的配置:

$('#E').draggable({
  revert: true, // 根据你的需求保留其他参数
  // 不要加会干扰禁用的自定义事件或配置
});

额外提示

如果还是不行,可以在禁用后打印下选中的元素列表,看看E有没有被包含进去:

console.log($('.draggable-item').not('#A'));

这样就能快速确认是不是选择器的问题啦。

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

火山引擎 最新活动