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 是否可用
可访问性 ✅ 天生支持 ⚠️ 需处理
相关推荐
To_OC5 小时前
写了三遍 Todo List,我终于搞懂了 React 父子组件到底怎么通信
前端·javascript·react.js
勇往直前plus6 小时前
Vue3(篇一) 核心概念——响应式模板语法与组件基础
前端·javascript·vue.js
咩咩啃树皮6 小时前
第43篇:Vue3计算属性(computed)完全精讲——缓存机制、依赖计算、业务最优解
前端·vue.js·缓存
用户938515635077 小时前
从零搭建 AI 日记助手:用 Milvus 向量数据库 + RAG 让机器读懂你的每一天
javascript·人工智能·全栈
徐小夕8 小时前
花了一周,3亿tokens,我开源了一款 Word 文档智能审查平台,文稿自动质检+可视化分析,告别低效人工审核
前端·算法·github
a1117768 小时前
坦克大战3D Three.js 3D (开源项目)
开发语言·javascript·3d
kyriewen9 小时前
别再乱用useEffect了——你写的10个里有8个不该存在
前端·javascript·react.js
Ivanqhz9 小时前
Rust &‘static str浅析
java·前端·javascript·rust
IT_陈寒10 小时前
SpringBoot这个分页坑,我踩了三天才爬出来
前端·人工智能·后端
颜酱10 小时前
05 | 召回前置准备:根据业务数据库生成各数据库(读取配置阶段)
前端·人工智能·后端