不支持 href 属性,必须用 javascript(如 window.location.href)实现跳转; 用于纯导航, 用于需交互控制的场景;避免语义混淆、样式遮挡及无效 return false。

button 的 href 属性根本不起作用
HTML 规范里,<button></button> 不支持 href 属性——你写上去,浏览器直接忽略,不会报错,也不会跳转。常见错误是这样写:
<button href="about.html">关于我</button>
这行代码里的 href 是非法的,纯属无效冗余。真正要跳转,必须靠 JavaScript 主动触发。
- 删掉所有
<button></button>上的href属性,避免误导和后续调试干扰 - 用
window.location.href实现跳转,路径支持相对地址(如"people/janemcdonald.html")或完整 URL - 如果按钮在表单内且没设
type,默认是submit,点一下就提交表单并刷新页面——这不是跳转,是表单行为,记得显式写type="button"
a 标签和 button 什么时候该用哪个
<a></a> 和 <button></button> 表面都能点击,但语义和默认行为完全不同。
-
<a href="..."></a>:本质是导航,点击即跳转,无需 JS;适合纯页面跳转场景 -
<button type="button"></button>:本质是交互控件,无默认跳转行为;适合需要确认、校验、异步操作后再跳转的场景(比如弹 confirm 后再跳) - 别用
<a></a>做“假按钮”:不加href或写href="#"容易导致页面滚顶或刷新;写href="javascript:void(0)"又有兼容性和可访问性风险 - 图标按钮尤其要注意:只放
<i></i>没文字时,<a></a>可能因 CSS 重置丢失点击区域,而<button></button>更容易通过cursor: pointer和聚焦状态保证可操作性
onclick 里写 return false 是多余的
对 <button></button> 来说,onclick 函数里写 return false 并不能阻止什么——它本来就没有默认跳转行为。这个习惯常被误迁自 <a></a> 或表单提交场景。
- 确认逻辑后跳转,直接写
window.location.href = "xxx"即可 - 不确认时,函数自然结束,不用 return 任何东西
- 若用了
confirm(),它的返回值是布尔值,别把它和“阻止默认行为”混为一谈:它不触发任何默认动作,只是给你一个判断条件 - 常见错误写法:
if (confirm(...)) { return window.location.href = "..."; }——return在这里毫无意义,删掉
相邻按钮失效常因 DOM 结构错乱
两个 <button></button> 紧挨着却只有一个响应,大概率不是 JS 问题,而是 HTML 嵌套违规或 CSS 覆盖。
-
<button></button>是块级元素,不能合法嵌套在<p></p>或<span></span>里;若强行塞进<li>或<div> 但外层有 <code>pointer-events: none或负 margin 裁剪了点击区域,就会“点不中” - 检查开发者工具的 Elements 面板,看按钮是否被其他元素视觉遮挡(比如父容器
overflow: hidden或兄弟元素z-index过高) - 临时禁用全部自定义 CSS,测试原生行为是否恢复;若恢复,说明问题出在样式层而非逻辑层
- 避免用
<div align="right"> 这类过时属性控制布局,改用 flex 或 text-align <p>跳转失败往往不是代码写错了,而是把 <code><button></button>当成了<a></a>用,或者把语义、样式、JS 混在一起调试时漏掉了某一层的隐性约束。











