如何禁用可拖拽div?拖拽A后其他div禁用但E失效求助
解决拖拽A放置后无法禁用E的问题
嘿,我明白你现在的困扰——把A拖到目标区域后,B、C、D都乖乖被禁用不能拖拽了,可E却还能正常拖动,这确实挺闹心的。我帮你梳理下可能的问题点和解决办法:
先排查核心原因
大概率是你的禁用逻辑没有正确覆盖到E元素,常见的情况有两种:
- 选择器没包含E:比如你用的选择器是
$('.draggable:not(#A)'),但E的class不是draggable,或者id拼写有误,导致E没被选中执行禁用操作; - 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




