<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>4种方法解决为li添加事件问题</title>
<style type="text/css">
ul li{
list-style: none;
width: 200px;
height: 50px;
line-height: 50px;
text-align: center;
margin: 10px;
border: 1px solid red;
}
</style>
</head>
<body>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
</body>
<script type="text/javascript">
var lis = document.querySelectorAll("li");
/*
此时得到的是lis.length的值,这是问题的症结所在
 */
/*
这种问题的本质就是利用var声明的 i 是一个全局变量,全局变量在for执行时会得到最后一个数值(lis.length),所以会产生得不到每个中间值,
解决问题的本质是要将 i 转换成局部变量。
 */
// for(var i = 0;i<lis.length;i ){
//  lis[i].onclick = function(){
//  console.log(i);
//  }

// }

得到结果如图:

4种方法解决为 li列表 添加事件问题







/*
解决方法一:将i的值赋值给它本身的一个变量
 */
// for(var i = 0;i<lis.length;i ){
//  lis[i].index = i;
//  lis[i].onclick = function () {
//  console.log(this.index);
//  }
// }

得到结果如图:

4种方法解决为 li列表 添加事件问题






/*
解决方法二:匿名自执行函数
 */
// 将 i 传给匿名自执行函数的局部变量j
// for(var i = 0;i<lis.length;i ){
//  (function(j){
//  lis[j].onclick = function () {
//  console.log(j);
//  }
//  })(i)
// }

得到结果如图:

4种方法解决为 li列表 添加事件问题






/*
解决方法三:利用函数参数方法
 */
// 将lis 和 li 传给函数的参数,函数的参数实际为局部变量
// function clickEvent (li , index) {
//  li.onclick = function () {
//  console.log(index);
//  }
// }


// for(var i = 0;i<lis.length;i ){
//  clickEvent(lis[i] , i)
// }

得到结果如图:

4种方法解决为 li列表 添加事件问题




/*
解决方法四:把var 改为 let
 */
for(let i = 0;i<lis.length;i ){
lis[i].onclick = function () {
console.log(i);
}
}

得到结果如图:

4种方法解决为 li列表 添加事件问题


</script>
</html>

相关文章:

  • 2021-08-08
  • 2021-11-15
  • 2022-12-23
  • 2021-10-03
  • 2022-12-23
  • 2022-12-23
  • 2021-07-29
  • 2021-09-25
猜你喜欢
  • 2021-08-25
  • 2022-12-23
  • 2022-12-23
  • 2021-12-14
  • 2022-12-23
  • 2021-08-11
  • 2022-12-23
相关资源
相似解决方案