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

jQuery UI拖拽元素触发revert时如何恢复光标为默认样式

解决jQuery UI拖拽回退时光标无法恢复默认的问题

这个问题我之前处理过,本质是触发revert: "invalid"回退时,droppable的out事件可能没有被正确触发(比如拖拽元素在droppable区域内松开但触发回退,或者快速拖拽离开导致out事件未执行),导致光标停留在no-drop状态。下面给出两种可靠的解决方法:

方法一:通过Draggable的stop事件全局重置光标

在你的draggable初始化代码中添加stop回调,不管拖拽最终是成功放置还是触发回退,都统一重置所有.childspan的光标样式:

$('.your-draggable-element').draggable({
  revert: "invalid",
  stop: function() {
    // 恢复所有droppable元素的光标为默认样式
    $('.childspan').css("cursor", "default");
  }
});

方法二:给Droppable添加deactivate事件处理

deactivate事件会在拖拽操作结束时触发(无论是否完成放置),刚好可以用来兜底恢复光标状态。修改你的droppable配置:

$('.childspan').droppable({ 
    greedy: true, 
    hoverClass: "droppable-in", 
    over: function(event, ui) { 
        $(this).css("cursor", "no-drop"); 
        $(ui.helper).empty(); 
    }, 
    out: function(event, ui) { 
        $(this).css("cursor", "default"); 
        $(ui.helper).append(myimg); 
    },
    // 添加deactivate事件,拖拽结束时恢复光标
    deactivate: function(event, ui) {
        $(this).css("cursor", "default");
        // 可选:同步恢复helper的内容,避免状态不一致
        $(ui.helper).append(myimg);
    }
});

额外优化建议

你可以检查下droppable的accept选项是否配置正确:如果你的draggable元素不被.childspan接受,松开后会触发回退,但此时out事件可能不会触发。如果需要让.childspan仅接受特定拖拽元素,添加accept配置:

$('.childspan').droppable({
    accept: '.target-draggable-class', // 指定接受的拖拽元素选择器
    // 其他原有配置...
});

这样既能明确droppable的接受范围,也能配合上面的方法确保光标状态始终正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:40:08