href为空值(如href=""、href=" ")时浏览器会刷新当前页而非禁用链接,导致spa路由重置、表单重复提交风险及状态丢失,真正禁用应使用javascript阻止或改用button等语义化方案。

href 属性为空值(比如 href=""、href=" " 或 href=" ")时,浏览器会按当前页面 URL 重新发起一次 GET 请求——相当于刷新当前页,但不触发完整重载流程(如不重发 POST 数据),实际效果和点击“刷新按钮”接近。
href="" 不是“禁用链接”,而是刷新页面
很多人以为 href="" 是让链接不跳转的快捷写法,其实它有明确语义:指向当前文档自身。浏览器解析时会将其规范化为完整 URL(例如 https://example.com/path/page.html),然后发起新请求。
- 在单页应用(SPA)中,这可能导致路由重置、状态丢失、重复初始化
- 如果当前是表单提交后的结果页,
href=""刷新可能触发“确认重新提交表单”弹窗(尤其 Chrome) - 服务端若对空
href做了特殊拦截(如 Nginx 返回 403),反而会显示错误页而非刷新
href 值含空格或不可见字符也会被当作有效路径
浏览器对 href 的解析非常宽松:href=" "(一个空格)、href=" "(全角空格)、甚至 href="\t\n" 都会被 trim 后当作相对路径处理,最终仍可能导向当前页或根路径,具体取决于上下文。
- HTML5 规范允许空格开头/结尾,但不建议依赖;解析行为在旧版 IE 中更不稳定
- 构建工具(如 Webpack/Vite)通常不会校验
href内容,这类问题上线后才暴露 - 用 Lighthouse 或 axe 扫描可发现“空 href 链接”,但不会告诉你它实际会刷新
真正想禁用链接,得靠其他方式
如果目标是视觉上像链接但不跳转(比如占位符、未开通功能),href 不该留空。
- 用
href="javascript:void(0)":兼容性好,无副作用,但语义不清晰 - 用
href="#"+event.preventDefault():需 JS 配合,否则会滚到页面顶部 - 移除
href属性,改用role="link"+ CSS 修饰:最语义化,适合无障碍场景 - 直接用
<button type="button"></button>替代:如果行为本质是触发操作,这才是正确语义
空 href 最麻烦的地方在于它不报错、不警告,Network 面板里只看到一次多余的同页请求,而用户感知可能是“点一下页面闪一下”或“莫名回到首页”——这种问题往往要等线上监控上报大量重复 PV 才被注意到。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











