首页 新闻 会员 周边 捐助

关于闭包的一个问题

0
悬赏园豆:20 [已解决问题] 解决于 2017-11-19 20:12
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
<style type="text/css">
.div_common{
width: 100px;
height: 100px;
float:left;
background: red;
margin-right: 10px;
}
.p_common{
position: relative;
top:40px;
left:-440px;
float:left;
margin-right: 16px;
}
</style>
</head>
<body>
<div class="div_common"></div>
<div class="div_common"></div>
<div class="div_common"></div>
<div class="div_common"></div>
<p class="p_common">这是一个测试</p>
<p class="p_common">这是一个测试</p>
<p class="p_common">这是一个测试</p>
<p class="p_common">这是一个测试</p>
<script type="text/javascript">
var div_common = document.getElementsByClassName("div_common");
var p_common = document.getElementsByClassName("p_common");
for (var i = 0;i < 4;i++) {
(function(i) {
div_common[i].onclick = function() {
p_common[i].style.display = "none";
}
})(i);
}

</script>
</body>
</html>
想点击第一个div时,第一个div上的文字消失不见,点击第二个div时,第二个div上的文字消失不见......
知道这是一个闭包问题,可是不知道怎么解决,求解答,谢谢
花语剑情的主页 花语剑情 | 初学一级 | 园豆:5
提问于:2017-11-17 19:49
< >
分享
最佳答案
0

这并不是闭包问题,只是因为你把某个p元素隐藏之后,后面的元素往前跑导致的。

<!DOCTYPE html>
<html lang="zh">

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <meta http-equiv="X-UA-Compatible" content="ie=edge" />
  <title>Document</title>
  <style type="text/css">
    .div_common {
      width: 100px;
      height: 100px;
      float: left;
      background: red;
      margin-right: 10px;
    }
  </style>
</head>

<body>
  <div class="div_common">
    <p class="p_common">这是一个测试</p>
  </div>
  <div class="div_common">
    <p class="p_common">这是一个测试</p>
  </div>
  <div class="div_common">
    <p class="p_common">这是一个测试</p>
  </div>
  <div class="div_common">
    <p class="p_common">这是一个测试</p>
  </div>

  <script type="text/javascript">
    var div_common = document.getElementsByClassName("div_common");
    var p_common = document.getElementsByClassName("p_common");
    for (var i = 0; i < 4; i++) {
      (function (i) {
        div_common[i].onclick = function () {
          console.log(i);
          p_common[i].style.display = "none";
        }
      })(i);
    }
  </script>
</body>

</html>
想点击第一个div时,第一个div上的文字消失不见,点击第二个div时,第二个div上的文字消失不见...... 知道这是一个闭包问题,可是不知道怎么解决,求解答,谢谢
收获园豆:20
幻天芒 | 高人七级 |园豆:37207 | 2017-11-17 21:18

明白了,是不是当点击其中一个div时,div对应的p元素消失,消失的p元素所占的空间被其他的p元素所代替

花语剑情 | 园豆:5 (初学一级) | 2017-11-18 14:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册