这篇文章主要介绍“JS如何给元素添加事件”,在日常操作中,相信很多人在JS如何给元素添加事件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JS如何给元素添加事件”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
专注于为中小企业提供成都网站建设、成都网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业五华免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了成百上千企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
为了使浏览器在事件发生时能自动调用相应的事件处理程序处理事件,需要对事件源绑定事件处理程序(绑定事件处理程序也叫注册事件处理程序)。
绑定事件处理程序有以下 3 种方式:
在 HTML 标签中,使用事件属性(例onclick)绑定事件处理程序。该方式通过设置标签的事件属性值为事件处理程序。这种方法现在不推荐使用, html 和 js 耦合, 不利于维护。
在 js 中,使用事件源的事件属性(例onclick)绑定事件处理函数。该方式通过设置事件源对象的事件属性值为事件处理函数。
在 js 中,使用 addEventListener()
方法绑定事件和事件处理函数(IE9 之前的版本则使用 attach Event() 方法)。
1、使用HTML标签的事件属性绑定处理程序
需要注意的是,使用 HTML 标签的事件属性绑定事件处理程序的方式时,事件属性中的脚本代码不能包含函数声明,但可以是函数调用或一系列使用分号分隔的脚本代码。
【例 1】使用 HTML 标签的事件属性绑定事件处理程序。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>使用HTML标签的事件属性绑定事件处理程序</title> </head> <body> <input type="button" onclick="var name='创新互联';alert(name);" value="事件绑定测试"/> </body> </html>
上述代码的 button 为 click 事件的目标对象,其通过标签的事件属性 onclick 绑定了两条脚本代码进行事件的处理。上述代码在 Chrome 浏览器的运行后,当用户单击按钮时,将弹出警告对话框,结果如下图所示。
当事件处理程序涉及的代码在 2 条以上时,如果还像示例 1 那样绑定事件处理程序,会使程序的可读性变得很差。对此,可以将事件处理程序定义为一个函数,然后在事件属性中调用该函数。
【例 2】HTML 标签的事件属性为函数调用。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>HTML标签的事件属性为函数调用</title> <script> function printName(){ var name = "创新互联"; alert(name); } </script> </head> <body> <input type="button" onClick="printName()" value="事件绑定测试"/> </body> </html>
上述代码的执行结果和示例 1 完全相同。从上述两个示例可以看到,标签事件属性将 JS 脚本代码和 HTML 标签混合在一起,违反了 Web 标准的 JS 和 HTML 应分离的原则。所以,使用 HTML 标签的事件属性绑定事件处理程序不好,在实际应用时应尽量避免使用。
2、使用事件源的事件属性绑定处理程序
使 HTML 和 JS 分离的其中一种方式是通过使用事件源的事件属性绑定事件处理函数,绑定格式如下:
obj.on事件名 = 事件处理函数
格式中的 obj 为事件源对象。绑定的事件程序通常为一个匿名函数的定义语句,或者是一个函数名称。
事件源的事件属性绑定处理程序示例:
oBtn.onclick = function(){//oBtn为事件源对象,它的单击事件绑定了一个匿名函数定义 alert('hi') };
【例 3】使用事件源的事件属性绑定事件处理函数。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>使用事件源的事件属性绑定事件处理函数</title> <script> 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; }; </script> </head> <body> <input type="button" id="btn1" value="绑定一个匿名函数"> <input type="button" id="btn2" value="绑定一个函数名"> </body> </html>
上述 JS 代码中处理了 3 个事件:文档窗口加载事件 load、两个按钮的单击事件 click。这三个事件的处理都是使用事件源的事件属性绑定事件处理函数来实现的,其中 load 事件和第一个按钮的click事件绑定的是匿名函数,而第二个按钮的click事件绑定的是一个函数名。
需要特别注意的是,不能在 oBtn2 绑定的函数名后面加“()”,否则绑定的函数变为函数调用,这样就会在 JS 引擎执行到该行代码时自动调用执行,而在事件触发时却不会执行了。
在文档所有元素加载完成后会处理窗口加载事件函数,而单击每个按钮时将会触发单击事件。单击第一个和第二个按钮后,将分别弹出显示“hi”和“hello”两个警告对话框。
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() 绑定事件函数。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>使用addEventListener()/attachEvent()绑定事件函数</title> <script> function fn1(){ alert("fn1()"); } function fn2(){ alert("fn2()"); } function bindTest(){ document.addEventListener('click',fn1,false);//首先绑定fn1函数 document.addEventListener('click',fn2,false); } bindTest();//调用函数 </script> </head> <body> </body> </html>
上述代码在浏览器中运行后,当单击文档窗口时,会依次弹出显示“fn1()”和“fn2()”的警告对话框。
到此,关于“JS如何给元素添加事件”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!
网站标题:JS如何给元素添加事件
文章来源:https://www.cdcxhl.com/article48/ijedep.html
成都网站建设公司_创新互联,为您提供营销型网站建设、ChatGPT、软件开发、网站收录、搜索引擎优化、响应式网站
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联