全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-16 8 分钟 ✍️ juanwangdev

常见事件类型

JavaScript提供丰富的事件类型用于响应用户交互和状态变化。

鼠标事件

事件说明
click单击
dblclick双击
mousedown鼠标按下
mouseup鼠标释放
mousemove鼠标移动
mouseenter鼠标进入(不冒泡)
mouseleave鼠标离开(不冒泡)
mouseover鼠标悬停(冒泡)
mouseout鼠标移出(冒泡)
contextmenu右键菜单
JavaScript
element.addEventListener('click', (e) => {
  console.log('单击位置:', e.clientX, e.clientY);
});

element.addEventListener('contextmenu', (e) => {
  e.preventDefault();  // 禁用右键菜单
});

注意:mouseenter/mouseleave 不冒泡,mouseover/mouseout 会冒泡。

键盘事件

事件说明
keydown按键按下
keyup按键释放
keypress字符键按下(已废弃)
JavaScript
document.addEventListener('keydown', (e) => {
  console.log('按键:', e.key, '键码:', e.code);

  // 组合键判断
  if (e.ctrlKey && e.key === 's') {
    e.preventDefault();
    console.log('保存');
  }
});

表单事件

事件说明触发时机
input输入内容变化实时触发
change值改变失去焦点后
focus获得焦点-
blur失去焦点-
submit表单提交-
reset表单重置-
JavaScript
// 实时监听输入
input.addEventListener('input', (e) => {
  console.log(e.target.value);
});

// 表单提交
form.addEventListener('submit', (e) => {
  e.preventDefault();
  console.log('提交表单');
});

注意:input 事件实时触发,change 事件在失去焦点且值改变后触发。

文档/窗口事件

事件说明
load资源加载完成
DOMContentLoadedDOM解析完成
resize窗口大小改变
scroll滚动
beforeunload页面即将卸载
JavaScript
// DOM加载完成
document.addEventListener('DOMContentLoaded', () => {
  console.log('DOM已就绪');
});

// 窗口大小改变
window.addEventListener('resize', () => {
  console.log('窗口大小:', window.innerWidth);
});

// 页面关闭前提醒
window.addEventListener('beforeunload', (e) => {
  e.preventDefault();
  e.returnValue = '';
});

拖拽事件

事件说明
drag拖拽中
dragstart开始拖拽
dragend结束拖拽
dragenter拖入目标
dragover在目标上方
dragleave离开目标
drop放下
JavaScript
element.addEventListener('dragstart', (e) => {
  e.dataTransfer.setData('text', e.target.id);
});

target.addEventListener('dragover', (e) => {
  e.preventDefault();  // 必须阻止默认行为
});

target.addEventListener('drop', (e) => {
  e.preventDefault();
  const id = e.dataTransfer.getData('text');
  target.appendChild(document.getElementById(id));
});

触摸事件(移动端)

事件说明
touchstart触摸开始
touchmove触摸移动
touchend触摸结束
touchcancel触摸取消
JavaScript
element.addEventListener('touchstart', (e) => {
  const touch = e.touches[0];
  console.log('触摸位置:', touch.clientX, touch.clientY);
});

要点总结

  1. 鼠标事件注意 mouseenter/mouseleave 不冒泡的特性
  2. 键盘事件用 keydownkeypress 已废弃
  3. input 实时监听,change 失焦后触发
  4. DOMContentLoadedload 更早触发
  5. 拖拽事件需在 dragover 中阻止默认行为

📝 发现内容有误?点击此处直接编辑

← 上一篇 事件监听
下一篇 → 作用域与变量提升
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库