当前页按钮仍可点击是因为仅加active类不阻断交互;正确做法是用button[type="button"]配合aria-current="page"并拦截click事件,或用a标签加aria-current="page"和e.preventDefault()。

当前页按钮为什么还能点?
当前页按钮视觉上高亮(active类),但用户仍能点击——这不是 bug,而是你没真正禁用它。Bootstrap 的 active 类只改样式,不阻止交互;它和 disabled 是两回事。当前页按钮必须同时满足两个条件:视觉高亮 + 语义禁用 + 事件阻断。
- 仅加
class="active":按钮可聚焦、可回车触发、屏幕阅读器读作“跳转到第3页”,完全没禁用 - 仅加
disabled属性:语义正确,但 Bootstrap 分页结构里通常用<a>标签,disabled对<a>无效(浏览器不识别) - 没加
aria-current="page":搜索引擎和读屏软件无法判断这是当前页,影响 SEO 和无障碍
分页中当前页该用 <a> 还是 <button>?
优先用 <button>,尤其在 SPA 或 JS 驱动的分页里。因为 <a> 天然可跳转,即使加了 href="#",点击仍会触发默认行为(页面滚动到顶),必须显式 event.preventDefault()。
-
<button type="button">:无默认行为,语义清晰,disabled属性直接生效 -
<a href="#">:需手动拦截click事件,且disabled不起作用,只能靠aria-disabled="true"+tabindex="-1"+event.preventDefault() - 如果必须用
<a>(比如服务端渲染分页),务必在 JS 中绑定 click 时第一行写e.preventDefault(),否则用户点一下页面就跳回顶部
aria-current="page" 和 disabled 能一起用吗?
不能混用。当前页不是“禁用”,而是“已选中”。aria-current="page" 表示语义上的当前位置,disabled 表示不可操作状态——二者逻辑冲突。当前页按钮应保持可聚焦(方便键盘导航),但不响应点击。
- 正确做法:
<button type="button" aria-current="page">3</button>,再通过 JS 绑定 click 时直接return或不做任何处理 - 错误做法:
<button disabled aria-current="page">3</button>—— 屏幕阅读器会读“按钮,已禁用,当前页”,自相矛盾 - 若用
<a>,则写:<a href="#" aria-current="page">3</a>,并在 JS 中e.preventDefault(),不设disabled
为什么加了 pointer-events: none 还是能键盘触发?
pointer-events: none 只屏蔽鼠标事件,对键盘(Enter/Space)、屏幕阅读器、表单提交、事件委托完全无效。它只是“视觉遮罩”,不是真正的禁用。
立即学习“前端免费学习笔记(深入)”;
- 键盘用户按 Enter 仍会触发
<button>的 click 事件 - 表单内
<button type="submit">加了pointer-events: none,用户按回车依然提交 - 父级监听
click时,event.target仍是该按钮,event.target.disabled为false,无法靠它过滤 - 真正可靠的方案只有两个:
button.disabled = true(对<button>),或aria-disabled="true"+ 手动拦截事件(对<a>或自定义组件)



















