目录
  1. 1. 点赞案例
    1. 1.1. 页面
    2. 1.2. 资源
    3. 1.3. 脚本
闭包实现点赞案例

点赞案例

页面

页面:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>选择心仪的</title>
<style>
ul {
list-style-type: none;
}

li {
float: left;
margin-left: 10px;
}

img {
width: 200px;
height: 180px;
}

input {
margin-left: 30%;
}
</style
</head>
<body>
<ul>
<li><img src="images/ly.jpg" alt=""><br/><input type="button" value="赞(1)"></li>
<li><img src="images/lyml.jpg" alt=""><br/><input type="button" value="赞(1)"></li>
<li><img src="images/fj.jpg" alt=""><br/><input type="button" value="赞(1)"></li>
<li><img src="images/bd.jpg" alt=""><br/><input type="button" value="赞(1)"></li>
</ul>
</body>
<script src="bb.js"></script>
</html>

资源

资源文件:

bd.jpg

fj.jpg

ly.jpg

lyml.jpg

需要实现点击按钮,实现点赞数+1:

脚本

bb.js:

//获取所有的按钮
//根据标签名字获取元素
function my$(tagName) {
return document.getElementsByTagName(tagName);
}

var btnObjs = my$("input");
var value = 1;
//循环遍历每个按钮
for (var i = 0; i < btnObjs.length; i++) {
//为每个按钮注册点击事件
btnObjs[i].onclick = function () {
this.value = "赞(" + (value++) + ")";
};
}

可以看出,以上方式,有BUG,点击了一张照片的点赞数,会同时累加到另一张照片的点赞数当中,因为此处公用一个value,.

因此需要修复这个案例,采用闭包:

//获取所有的按钮
//根据标签名字获取元素
function my$(tagName) {
return document.getElementsByTagName(tagName);
}
// //闭包缓存数据
function getValue() {
var value = 1;
return function () {
//每一次点击的时候,都应该改变当前点击按钮的value值
this.value = "赞(" + (++value) + ")";
}
}
// //获取所有的按钮
var btnObjs = my$("input");
// //循环遍历每个按钮,注册点击事件
for (var i = 0; i < btnObjs.length; i++) {
//注册事件
btnObjs[i].onclick = getValue();
}

文章作者: Jachie Xie
文章链接: https://xjc5772.github.io/2020-07/09/%E5%AD%A6%E4%B9%A0/%E5%89%8D%E7%AB%AF%E5%AD%A6%E4%B9%A0/JS/%E9%97%AD%E5%8C%85%E5%AE%9E%E7%8E%B0%E7%82%B9%E8%B5%9E%E6%A1%88%E4%BE%8B/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 XJC&Blog
打赏
  • 微信
  • 支付宝

评论