<!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);
// }
/*
解决方法一:将i的值赋值给它本身的一个变量
*/
// for(var i = 0;i<lis.length;i++){
// lis[i].index = i;
// lis[i].onclick = function () {
// console.log(this.index);
// }
// }
/*
解决方法二:匿名自执行函数
*/
// 将 i 传给匿名自执行函数的局部变量j
// for(var i = 0;i<lis.length;i++){
// (function(j){
// lis[j].onclick = function () {
// console.log(j);
// }
// })(i)
// }
/*
解决方法三:利用函数参数方法
*/
// 将lis 和 li 传给函数的参数,函数的参数实际为局部变量
// function clickEvent (li , index) {
// li.onclick = function () {
// console.log(index);
// }
// }
// for(var i = 0;i<lis.length;i++){
// clickEvent(lis[i] , i)
// }
/*
解决方法四:把var 改为 let
*/
for(let i = 0;i<lis.length;i++){
lis[i].onclick = function () {
console.log(i);
}
}
</script>
</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);
// }
// }
得到结果如图:
/*
解决方法一:将i的值赋值给它本身的一个变量
*/
// for(var i = 0;i<lis.length;i++){
// lis[i].index = i;
// lis[i].onclick = function () {
// console.log(this.index);
// }
// }
得到结果如图:
/*
解决方法二:匿名自执行函数
*/
// 将 i 传给匿名自执行函数的局部变量j
// for(var i = 0;i<lis.length;i++){
// (function(j){
// lis[j].onclick = function () {
// console.log(j);
// }
// })(i)
// }
得到结果如图:
/*
解决方法三:利用函数参数方法
*/
// 将lis 和 li 传给函数的参数,函数的参数实际为局部变量
// function clickEvent (li , index) {
// li.onclick = function () {
// console.log(index);
// }
// }
// for(var i = 0;i<lis.length;i++){
// clickEvent(lis[i] , i)
// }
得到结果如图:
/*
解决方法四:把var 改为 let
*/
for(let i = 0;i<lis.length;i++){
lis[i].onclick = function () {
console.log(i);
}
}
得到结果如图:
</script>
</html>