javascript(addEventListener事件处理函式)(DAY21)

这篇文章会介绍addEventListener事件处理函式,它其实和event的监听事件很像,但是addEventListener有它的方便性和特点,我们赶快来认识吧!

  • addEventListener()事件处理函式

语法: addEventListener("click",func)

  1. "click"为事件处理器(callback),可以放入changeblur等事件,和event的不同在於事件的前面开头不用加on,像是:onclick,只需使用click
  2. func为要呼叫的函式名称

addEventListener和event的不同与特点:

  1. event事件都是写在html元素中,也就等於html和javascript是在一起的,这样在撰写程序码或之後编辑时会比较混乱;而addEventListener则是写在javascript中去对html元素监听,html和javascript是分开的,可读性会比较高
  2. addEventListener可以将html元素同时加入多个监听事件呼叫多个不同的function函式;而event事件一次都只能使用一个监听事件和呼叫一个function。

Example

  • 原始的样子:

https://ithelp.ithome.com.tw/upload/images/20211002/2014022565LHvCryQc.png

  • 变换数值时,自动改变总金额:

https://ithelp.ithome.com.tw/upload/images/20211002/20140225ejNFRLmuOE.png

  • 若为负值,不会变动总金额:

https://ithelp.ithome.com.tw/upload/images/20211002/20140225E0O2Qq8GJW.png

<body style="background-color:antiquewhite">
   台湾臭豆腐$60:<input type="number" id="tofu" value="0" />盘<br />
   韩国起司泡面$120:<input type="number" id="noodles" value="0" />碗<br />
   总共<span style="color:red" id="subtotal">0</span>元
   <script>
       //script区块这时候必须放在body区块的最後面,否则会发生错误!
       var tofu = document.getElementById("tofu");
       //var为全域变数,故在function中tofu变数名称也可以被使用
       var noodles = document.getElementById("noodles");
       tofu.addEventListener("change", total);
       //1.监听tofu物件是否被触发
       //2.也可以使用this.addEventListener
       //3.this的意思是目前使用者触发该事件的物件(元素)
       noodles.addEventListener("change", total);
       //1.监听noodles物件是否被触发
       //2.也可以使用this.addEventListener
       function total() {
           var money;
           var x = tofu.value;
           if (x < 0) {
               x = 0;
           }
           //检查使用者是否输入负值,若为负值,则将该输入框的值设定成0
           var y = noodles.value;
           if (y < 0) {
               y = 0;
           }
           money = x * 60 + y * 120;
           //计算$
           document.getElementById("subtotal").innerHTML = money;
       };
   </script>
</body>

补充:在上面这个范例中,若script区块放在head中,则会发生以下错误:
https://ithelp.ithome.com.tw/upload/images/20211002/20140225MR80vX9GMZ.png
因JavaScript 是从上到下进行编译,故执行时,body中的物件还没被建立,所以编译器会找不到,因此发生错误。所以需移至body的最後面就可以解决这个问题了!

结语

这篇文章介绍了addEventListener事件处里函式,也举了一些例子,像是自动监听使用者的操作行为,来做相对应的回应等。下一篇会介绍javascript的表单资料处理和验证!


<<:  Day 22. 列表渲染 – v-for

>>:  Day 22网路程序设计

Progressive Web App 离线後备页面: 玩过 Chrome 小恐龙游戏了吗 (11)

离线後备页面介绍 (offline fallback page) 离线後备页面提供用户在网路不稳定的...

D10 - 「数位×IN×OUT」

电子助教:「这个标题...我闻到了停刊的味道... (́⊙◞౪◟⊙‵)」 这个章节开始我们要建立「数...

Day 3 : HTML - 快速打出HTML的代码,超好用的Emmet语法!

想必大家都有这个困扰 如果今天要叫出10个div、再宣告不同的class 就要一直反覆的输入div、...

Day 21 - GitOps 解决方案比较

本文将於赛後同步刊登於笔者部落格 有兴趣学习更多 Kubernetes/DevOps/Linux 相...

10 | WordPress 图片区块 Image Block | 双色调滤镜 (Duotone Filter)

使用双色调并不是十麽新鲜的事情,最早可以追溯到 60 年代,传统的单色印刷或之後随着数码技术日渐流...