a 标签的跳转机制

结合着好未来秋招的一道面试题讲解一下 a 标签的跳转机制。

题目代码

html 复制代码
<a href="https://www.baidu.com"
   onclick="window.open('https://www.csdn.net')">
  link
</a>

会弹出哪个页面?

会同时打开两个页面:

  • 新窗口 / 新标签: https://www.csdn.net
  • 当前页面跳转到: https://www.baidu.com

注意!如果 href 的值为 baidu.com ,则会跳转到 http://127.0.0.1:5500/www.baidu.com(我这里用的 vscode 插件会开启一个 5500 端口的页面)


  1. 点击 <a> 触发 onclick

  2. 执行 JS:

    js 复制代码
    window.open('https://www.csdn.net')

    → 打开新窗口(或新标签)

  3. JS 执行完毕

  4. 浏览器继续执行 a 标签的默认行为

    html 复制代码
    href="https://www.baidu.com"

JS 不会自动阻止默认行为

怎么禁用 onclick?

✅ 方式一:return false

html 复制代码
<a href="https://www.baidu.com"
   onclick="return false">
  link
</a>

👉 return false =

✔️ preventDefault

✔️ stopPropagation


✅ 方式二:event.preventDefault

html 复制代码
<a href="https://www.baidu.com"
   onclick="event.preventDefault()">
  link
</a>

✅ 方式三:JS 解绑(工程化)

js 复制代码
a.onclick = null;

或

js 复制代码
a.removeEventListener('click', handler);

❌ 错误理解澄清

js 复制代码
onclick = () => {}

❌ 这样不会阻止 a 的默认跳转


SPA 中为什么还用 <a>?

  • 框架(Vue / React)会:

    • 拦截 a 的默认行为
    • 用 history API 做无刷新跳转
  • 但:

    • 语义仍然正确
    • 可降级

a vs button:

维度 <a> <button>
语义 超链接(导航) 操作按钮
是否原生跳转 ✅ ❌
SEO ✅ 可被爬虫识别 ❌
右键新开 ✅ ❌
中键点击 ✅ ❌
无 JS 是否可用 ✅ ❌
可访问性 ✅ 天生支持 ⚠️ 需处理
相关推荐
程序员Sunday8 小时前
JavaScript 深拷贝和浅拷贝有什么区别?structuredClone 能替代 JSON 拷贝吗?
前端·javascript
花开富贵城9 小时前
使用fnm安装node.js包管理器
node.js
ShineWinsu9 小时前
对于CSS:选择器的解析
前端·css·面试·html·web·选择器·网页
m0_587383009 小时前
碰碰好评卡功能落地实战 从需求梳理到上线部署全流程实操指南
java·linux·服务器·前端·javascript·vue.js·人工智能
Pu_Nine_99 小时前
Vue‑Flow 从零入门实战|AI‑Agent 拓扑图开发
前端·javascript·vue.js
keyipatience9 小时前
CSS 学习(1):语法、引入方式、选择器、字体与背景
前端·css·html
程序人生8889 小时前
本地向量底座怎么搭?DocConverter Web 的 BGE 嵌入模型、ChromaDB 与外部 Milvus 接入
前端·milvus
恋猫de小郭9 小时前
Flutter Android 改动:APK 不再允许通过 Intent 动态修改 Engine 参数
android·前端·flutter
ck0135799 小时前
视频转 GIF 的基本流程与文件大小优化
前端·测试工具·html·音视频·视频
郝学胜-神的一滴9 小时前
Web安全入门:读懂Web世界里的攻防
前端·网络·后端·安全·web安全·hibernate