关于JS中无法有效获取for循环中i的值问题/利用for循环监听只对最后一项生效
问题:想在每次获取到i的值并输出,但是实际每次都输出循环中i的最后一个值
问题在于数组中的每项都是一个方法对象,导致函数产生了一个闭包域
//增加相应个数闭包域空间,使用IIFE把每个i的值都传进去
for(i = 0; i<yuans.length;i++){
(function(arg){
yuans[i].onclick = function(){
index=arg;
}
}(i));
}
想要实现每次点击后面删除按钮删除一项的效果
<body>
<!-- 建表-->
<table>
<tr>
<td>123</td>
<td>456</td>
<td>789</td>
<td>XXX</td>
<td><input type="button" class="delete" number="1" value="删除"></td>
</tr>
<tr>
<td>XXX</td>
<td>QQQ</td>
<td>WWW</td>
<td>EEE</td>
<td><input type="button" class="delete" number="2" value="删除"></td>
</tr>
<tr>
<td>TTT</td>
<td>TTT</td>
<td>TTT</td>
<td>TTT</td>
<td><input type="button" class="delete" number="3" value="删除"></td>
</tr>
<tr>
<td>YYY</td>
<td>YYY</td>
<td>YYY</td>
<td>YYY</td>
<td><input type="button" class="delete" number="4" value="删除"></td>
</tr>
<tr>
<td>UUU</td>
<td>UUU</td>
<td>UUU</td>
<td>UUU</td>
<td><input type="button" class="delete" number="5" value="删除"></td>
</tr>
</table>
<script>
var deleteBtns = document.getElementsByClassName("delete");
for(i =0;i<deleteBtns.length;i++){
//循环为每个按钮添加事件监听
deleteBtns[i].addEventListener("click",function(){
console.log(this.getAttribute("number"));
//在这里要使用this来调用对象否则调用的永远是最后一个
//var trParent = deleteBtns[i].parentNode.parentNode;
var trParent = this.parentNode.parentNode;
var deleteFirstKid = trParent.firstElementChild;
trParent.removeChild(trParent.firstElementChild);
})
}
</script>
</body>
本文作者:夜色哪里都是美
本文链接:https://www.cnblogs.com/evenIer/p/16286291.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步