讲师中心 微信公众号
AI工具推荐 视频效率加速

Layui弹出层如何设置点击取消按钮的回调

酷墨小哥_5216

酷墨小哥_5216

发布时间:2026-07-19 08:48:38

|

940人浏览过

|

来源于php中文网

原创

cancel是layui弹窗点击×或遮罩时唯一自动触发的必写回调,需显式定义;若要二次确认,首行必须return false阻断默认关闭,再调layer.confirm并手动close;ESC默认不触发cancel,需在success中监听keyup并手动调用。

cancel 回调就是点击取消按钮的唯一入口

点击右上角 × 按钮时,cancel 是 layui 唯一自动触发的回调函数,它不是可选配置项,而是必须显式定义才能捕获该行为。没写 cancel,点了 × 就直接关闭,无任何干预机会。

常见错误现象:

  • 写了 cancel 却没反应 → 检查是否设置了 closeBtn: 0(隐藏了关闭按钮)
  • 弹窗闪一下又回来 → cancel 函数里漏了 return false,但内部又执行了新弹窗或跳转,造成视觉错觉

正确写法示例:

layer.open({
  content: '编辑表单',
  cancel: function(index, layero) {
    console.log('用户点了 ×');
    // 这里做清理:重置表单、取消 pending 请求等
    return true; // 允许默认关闭(这是默认行为,可省略)
  }
});

想二次确认?必须开头 return false

cancel 不是“关闭前钩子”,而是“关闭动作已触发后”的回调。如果你在 cancel 里直接调 layer.confirm 却没先 return false,弹窗会先关掉,confirm 才弹出来——用户看到的就是一闪而逝。

关键操作顺序:

  • 第一行必须写 return false,阻断默认关闭流程
  • 紧接着调 layer.confirm,并在其 yes 和 cancel 回调里都显式调用 layer.close(index)
  • 不能漏传 index,否则关错层或报错 layer.close is not a function

示例:

layer.open({
  content: '请确认',
  cancel: function(index, layero) {
    return false; // ⚠️ 必须放第一行
    layer.confirm('确定要放弃修改?', function() {
      layer.close(index); // 点确定才真关
    }, function() {
      layer.close(index); // 点取消也得关,否则残留
    });
  }
});

遮罩层点击和 × 按钮共用同一个 cancel

只要设置了 shadeClose: true,点击遮罩层也会触发 cancel 回调——它不区分来源,统一处理。这是 layui 的设计逻辑,没有单独的 “遮罩点击回调”。

深蓝色网站后台管理系统layui框架模板-AdminPro
深蓝色网站后台管理系统layui框架模板-AdminPro

一款深蓝色网站后台管理系统layui框架模板

下载

所以别试图监听 .layui-layer-shade,原因很实际:

  • 遮罩 DOM 是全局复用的,多个弹窗共用一个节点,绑定 click 容易误触
  • layer 内部对遮罩点击做了 stopPropagation(),手动监听后调 layer.close(index) 可能导致 end 或 cancel 重复执行
  • 移动端 Safari 下遮罩 click 事件有时不响应,touchstart 又容易误判,兼容成本高

真实做法:把所有“用户主动放弃”的逻辑(点 ×、点遮罩、甚至 ESC)都收口到 cancel 里统一处理。

ESC 键默认不走 cancel,需手动接管

按 ESC 关闭弹窗时,cancel 不会自动执行。因为 ESC 是通过全局 keyup 监听后直接调 layer.close(index) 实现的,绕过了 cancel 流程。

要让 ESC 行为和点 × 一致,必须在 success 回调里手动绑定并调用 cancel:

  • 先保存传入的 cancel 引用(避免匿名函数无法复用)
  • 在 success 中监听 document 的 keyup,判断 e.which === 27
  • 显式调用 userCancel(index, layero),再执行 layer.close(index)
  • 务必在 end 回调中解绑事件,否则内存泄漏

这个细节容易被忽略:没绑定 keyup,ESC 就只是“静默关闭”,所有清理逻辑都失效。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2603

2023.08.11

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

5643

2023.10.09

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6650

2024.03.19

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

6338

2024.03.22

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

903

2024.05.22

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

0

2026.10.22

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

0

2026.10.22

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

0

2026.10.22

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

0

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
ThinkPHP配置开发与CMS后台实战
ThinkPHP配置开发与CMS后台实战

共87课时 | 13万人学习

第二十三期_综合实战
第二十三期_综合实战

共89课时 | 11.2万人学习

Layui 快速入门精讲
Layui 快速入门精讲

共5课时 | 1.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn