Bootstrap如何让按钮在点击时显示加载中的Spinner图标

大瑶同学_1999

大瑶同学_1999

2026-08-08

774人浏览

原创

禁用按钮必须用 button.disabled = true,仅加 disabled 类无效;插入 spinner-border 需清空内容后创建元素并设 aria-hidden;状态恢复须在 finally 中成套执行;按钮类型应设为 type="button" 防重复提交。

bootstrap如何让按钮在点击时显示加载中的spinner图标

必须用 button.disabled = true 禁用按钮,否则点击仍有效

只改文字或加图标,按钮照样能点——disabled 是唯一能真正阻断鼠标、键盘(空格/回车)、触屏事件的原生属性。Bootstrap 的灰化样式只是副作用,不是禁用逻辑本身。常见错误是只加 disabled 类,但 Bootstrap 5 不再响应 class="disabled" 来拦截交互,它只改颜色和透明度。

正确做法是直接操作 DOM 属性:

  • button.disabled = true(推荐,语义清晰、兼容性好)
  • 或 button.setAttribute('disabled', '')
  • 同时补上 button.setAttribute('aria-disabled', 'true') 和 button.tabIndex = -1,防安卓 WebView 点击穿透、提升读屏器播报准确率

用 spinner-border 插入 DOM,别靠伪元素或内联样式

伪元素旋转(如 ::after { animation: spin })会导致文字偏移、按钮宽度跳变;手动设 style="display: inline-block" 又容易被 Bootstrap 的 inline-flex 容器压制,尤其在小尺寸按钮里失效。

Bootstrap 5 自带的 spinner-border 更稳妥,但必须按规范插入:

VPS Bootstrap
VPS Bootstrap

从零启动全新 VPS,完成 OpenClaw 完整部署,包括备份/恢复及恢复后验证。用于 OpenClaw 部署。

下载
  • 先清空按钮内容:button.innerHTML = ''
  • 创建并插入 spinner:const spinner = document.createElement('span');,加类 spinner-border spinner-border-sm,设 role="status" 和 aria-hidden="true"
  • 再追加文案:button.insertAdjacentText('beforeend', '提交中');
  • 按钮需加 position-relative,spinner 加 position-absolute top-50 start-50 translate-middle 居中,否则会贴左上角或撑高容器

状态恢复必须写在 finally 块里,且成套还原

只在 .then() 里恢复,接口返回 400/500 就卡死;只在 .catch() 里恢复,成功后反而漏掉。必须统一收口到 .finally()。

还原动作不能只写 button.disabled = false —— 某些旧环境不触发样式重绘。应成套执行:

  • button.removeAttribute('disabled')
  • button.removeAttribute('aria-disabled')
  • button.tabIndex = 0
  • button.innerHTML = originalHTML(保留原始图标、span 结构,别只用 textContent)
  • 若用了 AbortController,finally 里也要调 abortController.abort()

按钮类型要设为 type="button",避免表单重复提交

默认 type="submit" 在表单内会先触发 JS 事件,再触发表单提交,导致逻辑执行两次。这不是 spinner 的问题,是语义误用。

解决方式很简单:

  • 显式声明 <button type="button"></button>,彻底切断自动提交行为
  • 如果必须用 type="submit",就在事件处理函数开头加 event.preventDefault()
  • 别依赖 data-remote 或其他废弃特性,Bootstrap 5 已移除它们
实际最易被忽略的是:按钮内部结构变化后,visually-hidden 替代 display: none 隐藏原文案,既保障可访问性又不破坏布局;还有 spinner 尺寸要用 em(如 1.2em)而非固定像素,否则在缩放字体或响应式场景下错位。

相关专题

更多
bootstrap框架介绍
bootstrap框架介绍

本专题整合了bootstrap框架相关介绍,阅读专题下面的文章了解更多详细内容。

2026.03.18

685

21

bootstrap安装教程
bootstrap安装教程

本专题整合了bootstrap安装相关教程,阅读专题下面的文章了解更多详细操作教程。

2026.03.18

199

9

Python uv使用教程
Python uv使用教程

本专题汇总了 Python uv 使用教程与高效使用指南,从 uv 安装配置、常用命令到虚拟环境、依赖管理与项目打包,系统讲解如何用 uv 替代 pip 与 poetry,全面提升 Python 项目开发效率,助你快速上手这一现代化包管理工具,打造干净高效的 Python 工作流。

2026.10.15

0

15

剧云AI短剧创作教程合集
剧云AI短剧创作教程合集

本专题聚焦剧云AI短剧创作,讲解从短剧灵感、梗概、全局大纲到分集、分场和正文的完整流程及节奏设计方法。

2026.10.14

0

15

剧云AI剧本创作零基础入门
剧云AI剧本创作零基础入门

本专题系统讲解剧云AI剧本创作流程,涵盖灵感、梗概、大纲、分场与正文生成,帮助新手快速完成首个中文剧本项目。

2026.10.14

0

14

VibeKnow文档转视频操作指南
VibeKnow文档转视频操作指南

本专题讲解VibeKnow上传Word、TXT、Markdown等材料生成视频的方法,覆盖内容解析、脚本组织、画面生成与成片检查。

2026.10.14

0

15

VibeKnow知识视频制作与导出详解
VibeKnow知识视频制作与导出详解

本专题整理VibeKnow从注册、素材上传、AI生成到预览导出的完整操作,帮助新手快速制作第一条知识讲解视频。

2026.10.14

0

13

二狗PPT大纲编辑实操指南
二狗PPT大纲编辑实操指南

本专题聚焦二狗PPT结构化大纲的生成和修改,讲解标题、正文、目录、页数与页面顺序的调整方法,提升汇报逻辑和内容完整性。

2026.10.14

0

15

二狗PPT文档转PPT全教程
二狗PPT文档转PPT全教程

本专题讲解二狗PPT解析Word、PDF、Excel和PPT资料的方法,涵盖文件上传、内容提取、大纲整理、异常处理与转换后校对。

2026.10.14

0

13

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Bootstrap5 入门教程
Bootstrap5 入门教程

共0课时 | 0人学习

Bootstrap Components 组件文档
Bootstrap Components 组件文档

共0课时 | 0人学习

Bootstrap Grid 栅格系统
Bootstrap Grid 栅格系统

共0课时 | 0人学习