原生JavaScript中事件绑定的三种方式

 更新时间:2025年05月08日 08:29:49   作者:Aphasia  
在 Web 开发中,事件绑定是与用户交互的核心机制,无论是点击按钮、输入文本,还是拖动页面元素,我们都需要通过事件来响应这些动作,本文给大家介绍了原生JavaScript中事件绑定的三种方式,需要的朋友可以参考下

一、HTML 标签中的事件属性绑定

这是最早期也是最简单的事件绑定方式,通过在 HTML 标签上直接添加事件属性来实现。

<button onclick="alert('按钮被点击了')">点击我</button>

原理说明:

  • 使用事件属性(如 onclickonmouseoveronchange 等)直接绑定一个内联的 JavaScript 表达式。
  • 当用户与该元素交互时,浏览器会执行属性值对应的代码。

优点:

  • 书写简单,适合快速测试或 demo 页面。
  • 不需要额外的 JavaScript 文件。

缺点:

  • 结构不清晰:HTML 中混入了 JS 逻辑,违背了“结构与行为分离”的原则。
  • 不利于维护:代码冗杂且不易管理,尤其是在大型项目中。
  • 不支持多个监听器:同一事件只能绑定一个处理函数。

使用建议:

仅适合简单演示或快速开发,不推荐在生产环境中使用

二、DOM 元素对象的事件属性绑定

这种方式将事件绑定逻辑写在 JavaScript 中,保持了 HTML 的整洁。

<button id="myBtn">点击我</button>

<script>
  const btn = document.getElementById('myBtn');
  btn.onclick = function () {
    alert('按钮点击事件触发!');
  };
</script>

原理说明:

  • 通过 DOM 操作获取元素对象;
  • 直接设置事件属性(如 onclick)为一个函数,事件触发时会执行该函数。

优点:

  • HTML 与 JavaScript 分离,代码结构更加清晰;
  • 易于调试和管理。

缺点:

  • 只能绑定一个事件处理函数:如果对同一事件重复赋值,后一个会覆盖前一个。
btn.onclick = function () {
  alert('第一个处理函数');
};
btn.onclick = function () {
  alert('第二个处理函数'); // 会覆盖前面的绑定
};

使用建议:

相比 HTML 内联方式更优,但由于无法绑定多个处理函数,也不支持事件捕获机制,适合简单项目或学习使用

三、使用 addEventListener 方法绑定

这是现代 JavaScript 中推荐使用的事件绑定方式,功能强大且灵活。

<button id="myBtn">点击我</button>

<script>
  const btn = document.getElementById('myBtn');
  btn.addEventListener('click', function () {
    alert('使用 addEventListener 绑定的事件');
  });
});

原理说明:

  • addEventListener 是 DOM 提供的方法,接受三个参数:

    事件类型(如 'click''keydown');

    事件处理函数;

    可选的布尔值或对象,用于指定事件是否在捕获阶段触发(默认为冒泡阶段)。

element.addEventListener(type, listener, options);

优点:

  • 支持多个事件监听器:不会覆盖,多个处理函数可以依次执行。
  • 支持事件冒泡与捕获机制
  • 可移除事件监听器(使用 removeEventListener);
  • 语义清晰,便于维护和扩展
function handler1() {
  alert('处理函数1');
}

function handler2() {
  alert('处理函数2');
}

btn.addEventListener('click', handler1);
btn.addEventListener('click', handler2); // 两者都触发

缺点:

  • 写法相对较长,尤其是在绑定多个事件时;
  • 必须传入相同的函数引用才能移除事件监听器。
btn.removeEventListener('click', handler1);

使用建议:

addEventListener 是现代前端开发的首选事件绑定方式,推荐在所有正式项目中使用。

结语

在实际开发中,推荐优先使用 addEventListener,它提供了最大的灵活性和最好的兼容性,是构建交互性网页的标准做法。

以上就是原生JavaScript中事件绑定的三种方式的详细内容,更多关于JavaScript事件绑定的资料请关注脚本之家其它相关文章!

相关文章

  • 原生js实现放大镜效果

    原生js实现放大镜效果

    本文主要分享了原生js封装实现放大镜效果的示例代码,具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • JavaScript实现信用卡校验方法

    JavaScript实现信用卡校验方法

    这篇文章主要介绍了JavaScript实现信用卡校验方法,涉及javascript使用Luhn算法进行校验的技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • javascript 处理null及null值示例

    javascript 处理null及null值示例

    这篇文章以示例的方式为大家介绍下javascript 如何处理null及'null'值,需要的朋友可以参考下
    2014-06-06
  • JS组件Bootstrap实现弹出框和提示框效果代码

    JS组件Bootstrap实现弹出框和提示框效果代码

    这篇文章主要介绍了JS组件Bootstrap实现弹出框和提示框效果代码,对弹出框和提示框感兴趣的小伙伴们可以参考一下
    2015-12-12
  • 如何在js中引入less的变量

    如何在js中引入less的变量

    这篇文章主要介绍了如何在js中引入less的变量,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • 用最通俗易懂的代码帮助新手理解javascript闭包 推荐

    用最通俗易懂的代码帮助新手理解javascript闭包 推荐

    我同样也是个javascript新手,怎么说呢,先学的jquery,精通之后发现了javascript的重要性,再回过头来学javascript面向对象编程
    2012-03-03
  • JS文本框不能输入空格验证方法

    JS文本框不能输入空格验证方法

    JS文本框不能输入空格验证方法,需要的朋友可以参考一下
    2013-03-03
  • 一文教会你从零开始画echarts地图

    一文教会你从零开始画echarts地图

    ECharts是一个使用JavaScript实现的开源可视化库,涵盖各行业图表,满足各种需求,下面这篇文章主要给大家介绍了如何从零开始画echarts地图的相关资料,需要的朋友可以参考下
    2022-04-04
  • JavaScript无阻塞加载和defer、async详解

    JavaScript无阻塞加载和defer、async详解

    JS具有阻塞特性,当浏览器在执行js代码时,不能同时做其它事情,所有浏览器在下载JS的时候,会阻止一切其他活动,比如其他资源的下载,内容的呈现等等。至到JS下载、解析、执行完毕后才开始继续并行下载其他资源并呈现内容。
    2017-02-02
  • 拥Bootstrap入怀——导航栏篇

    拥Bootstrap入怀——导航栏篇

    拥Bootstrap入怀 导航栏篇,和大家一起走进Bootstrap,了解Bootstrap的导航栏,感兴趣的小伙伴们可以参考一下
    2016-05-05

最新评论