怎么给元素添加事件?JS绑定事件三种方式解析

javascript作为脚本语言, 可以为页面上的元素绑定事件,用于在指定事件发生时能自动调用相应的事件处理程序处理事件。那么怎么给元素添加事件?下面本篇文章给大家介绍一下js绑定事件三种方式,希望对大家有所帮助!

怎么给元素添加事件?JS绑定事件三种方式解析

为了使浏览器在事件发生时能自动调用相应的事件处理程序处理事件,需要对事件源绑定事件处理程序(绑定事件处理程序也叫注册事件处理程序)。

绑定事件处理程序有以下 3 种方式:

在 HTML 标签中,使用事件属性(例onclick)绑定事件处理程序。该方式通过设置标签的事件属性值为事件处理程序。这种方法现在不推荐使用, html 和 js 耦合, 不利于维护。

在 js 中,使用事件源的事件属性(例onclick)绑定事件处理函数。该方式通过设置事件源对象的事件属性值为事件处理函数。

在 js 中,使用 addEventListener() 方法绑定事件和事件处理函数(IE9 之前的版本则使用 attach Event() 方法)。

1、使用HTML标签的事件属性绑定处理程序

需要注意的是,使用 HTML 标签的事件属性绑定事件处理程序的方式时,事件属性中的脚本代码不能包含函数声明,但可以是函数调用或一系列使用分号分隔的脚本代码。

【例 1】使用 HTML 标签的事件属性绑定事件处理程序。

nbsp;html>使用HTML标签的事件属性绑定事件处理程序     

登录后复制

上述代码的 button 为 click 事件的目标对象,其通过标签的事件属性 onclick 绑定了两条脚本代码进行事件的处理。上述代码在 Chrome 浏览器的运行后,当用户单击按钮时,将弹出警告对话框,结果如下图所示。

1.png

当事件处理程序涉及的代码在 2 条以上时,如果还像示例 1 那样绑定事件处理程序,会使程序的可读性变得很差。对此,可以将事件处理程序定义为一个函数,然后在事件属性中调用该函数。

【例 2】HTML 标签的事件属性为函数调用。

nbsp;html>HTML标签的事件属性为函数调用     function printName(){          var name = "PHP中文网";          alert(name);     }     

登录后复制

上述代码的执行结果和示例 1 完全相同。从上述两个示例可以看到,标签事件属性将 JS 脚本代码和 HTML 标签混合在一起,违反了 Web 标准的 JS 和 HTML 应分离的原则。所以,使用 HTML 标签的事件属性绑定事件处理程序不好,在实际应用时应尽量避免使用。

2、使用事件源的事件属性绑定处理程序

使 HTML 和 JS 分离的其中一种方式是通过使用事件源的事件属性绑定事件处理函数,绑定格式如下:

obj.on事件名 = 事件处理函数

登录后复制

格式中的 obj 为事件源对象。绑定的事件程序通常为一个匿名函数的定义语句,或者是一个函数名称。

事件源的事件属性绑定处理程序示例:

oBtn.onclick = function(){//oBtn为事件源对象,它的单击事件绑定了一个匿名函数定义      alert('hi')};

登录后复制

【例 3】使用事件源的事件属性绑定事件处理函数。

nbsp;html>使用事件源的事件属性绑定事件处理函数     window.onload = function(){//窗口加载事件绑定了一个匿名函数          //定义一个名为fn的函数          function fn(){               alert('hello');          }          //获取事件源对象          var oBtn1 = document.getElementById("btn1");          var oBtn2 = document.getElementById("btn2");                   //绑定一个匿名函数          oBtn1.onclick = function(){               alert("hi");          }          //绑定一个函数名          oBtn2.onclick = fn;     };      

登录后复制

上述 JS 代码中处理了 3 个事件:文档窗口加载事件 load、两个按钮的单击事件 click。这三个事件的处理都是使用事件源的事件属性绑定事件处理函数来实现的,其中 load 事件和第一个按钮的click事件绑定的是匿名函数,而第二个按钮的click事件绑定的是一个函数名。

需要特别注意的是,不能在 oBtn2 绑定的函数名后面加“()”,否则绑定的函数变为函数调用,这样就会在 JS 引擎执行到该行代码时自动调用执行,而在事件触发时却不会执行了。

在文档所有元素加载完成后会处理窗口加载事件函数,而单击每个按钮时将会触发单击事件。单击第一个和第二个按钮后,将分别弹出显示“hi”和“hello”两个警告对话框。

2.png

3.png

3、使用addEventListener()绑定处理程序

使用事件源对象的事件属性绑定事件处理程序方式虽然简单,但其存在一个不足之处:一个事件只能绑定一个处理程序,后面绑定的事件处理函数会覆盖前面绑定的事件处理函数。实际应用中,一个事件源的一个事件可能会用到多个函数来处理。

当一个事件源需要使用多个函数来处理时,可以通过事件源调用 addEventListener()(针对标准浏览器)来绑定事件处理函数以实现此需求。一个事件源通过方法绑定多个事件函数的实现方式是:对事件源对象调用多次 addEventListener(),其中每次的调用只绑定一个事件处理函数。

addEventListener() 是标准事件模型中的一个方法,对所有标准浏览器都有效。使用 addEvent Liste ner() 绑定事件处理程序的格式如下:

事件源.addEventListener(事件名称,事件处理函数名,是否捕获);

登录后复制

参数“事件名称”是一个不带“on”的事件名;参数“是否捕获”是一个布尔值,默认值为 false,取 false 时实现事件冒泡,取 true 时实现事件捕获。

通过多次调用 addEventListener() 可以为一个事件源对象的同一个事件类型绑定多个事件处理函数。当对象发生事件时,所有该事件绑定的事件处理函数就会按照绑定的顺序依次调用执行。另外,需要注意的是,addEventListener() 绑定的事件处理函数中的 this 指向事件源。

addEventListener() 绑定处理程序示例:

document.addEventListener('click',fn1,false);//click事件绑定fn1函数实现事件冒泡document.addEventListener('click',fn2,true);//click事件绑定fn2函数实现事件捕获

登录后复制

【例 4】使用 addEventListener() 绑定事件函数。

nbsp;html>使用addEventListener()/attachEvent()绑定事件函数     function fn1(){          alert("fn1()");     }     function fn2(){         alert("fn2()");     }     function bindTest(){         document.addEventListener('click',fn1,false);//首先绑定fn1函数            document.addEventListener('click',fn2,false);        }     bindTest();//调用函数

登录后复制

上述代码在浏览器中运行后,当单击文档窗口时,会依次弹出显示“fn1()”和“fn2()”的警告对话框。

4.png

5.png

【推荐学习:javascript高级教程】

以上就是怎么给元素添加事件?JS绑定事件三种方式解析的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2699563.html

(0)
上一篇 2025年3月7日 18:59:54
下一篇 2025年2月19日 12:42:03

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 一文搞懂JS中的事件冒泡机制

    本篇文章聊聊事件冒泡,带大家深入了解一下JS中的事件冒泡机制,希望对大家有所帮助! 1. 事件          在浏览器客户端应用平台,基本生都是以事件驱动的,即某个事件发生,然后做出相应的动作。          浏览器的事件表示的是某…

    2025年3月7日 编程技术
    200
  • JavaScript实例解析之window页面加载事件

    本篇文章给大家带来了关于javascript的相关知识,其中主要介绍了window窗口事件,window.onload是窗口(页面)加载事件,当文档内容完全加载完成后才会触发该事件,下面一起来看一下,希望对大家有帮助。 【相关推荐:java…

    2025年3月7日 编程技术
    200
  • JavaScript中window对象的成员属性(总结分享)

    本篇文章给大家带来了关于javascript的相关知识,其中主要介绍了window对象的成员属性相关问题,window 对象,是 js 的最顶层对象,其他的 bom 对象都是 window 对象的属性,下面一起来看一下,希望对大家有帮助。 …

    2025年3月7日 编程技术
    200
  • 简单了解window.screen对象应用

    本篇文章给大家带来了关于javascript的相关知识,其中主要介绍了window.screen对象应用的相关问题,window.screen 对象包含有关用户屏幕的信息,下面一起来看一下,希望对大家有帮助。 【相关推荐:javascrip…

    2025年3月7日
    200
  • 深入浅析window.location对象实现页面跳转

    本篇文章给大家带来了关于javascript的相关知识,其中主要介绍了window.location对象实现页面跳转的相关问题,window.location对象用于获得当前页面的地址,并把浏览器重定向到新的页面,下面一起来看一下,希望对大…

    2025年3月7日 编程技术
    200
  • 总结归纳window.history对象的应用

    本篇文章给大家带来了关于javascript的相关知识,其中主要介绍了window.history对象的相关问题,history 对象包含用户(在浏览器窗口中)访问过的 url,下面一起来看一下,希望对大家有帮助。 【相关推荐:javasc…

    2025年3月7日 编程技术
    200
  • 整理JavaScript中cookie操作对象的应用

    本篇文章给大家带来了关于javascript的相关知识,其中主要介绍了cookie操作对象的应用相关问题,cookie 为 web 应用程序保存用户相关信息提供了一种有用的方法,下面一起来看一下,希望对大家有帮助。 【相关推荐:javasc…

    2025年3月7日
    200
  • JavaScript使用localStorage存储数据

    本篇文章给大家带来了关于javascript的相关知识,其中主要介绍了javascript使用localstorage存储数据,文中示例代码介绍的非常详细,具有一定的参考价值,希望对大家有帮助。 【相关推荐:javascript视频教程、w…

    2025年3月7日
    200
  • 一起聊聊JavaScript与HTML之间有什么区别与关联

    本篇文章给大家带来了关于javascript的相关知识,其中主要介绍了关于javascript和html之间的关联与区别的相关问题,html是一种标识性的语言,javascript是一种解释型的脚本语言,下面一起来看一下,希望对大家有帮助。…

    2025年3月7日
    200
  • 实例详解之操作单个dom元素添加动画

    本篇文章给大家带来了关于javascript的相关知识,其中主要介绍了关于操作dom元素添加动画效果的相关问题,下面一起来看一下,希望对大家有帮助。 【相关推荐:javascript视频教程、web前端】 DOM动画效果 让一个元素从左至右…

    2025年3月7日 编程技术
    200

发表回复

登录后才能评论