mxs___ 2021-08-26 14:15 采纳率: 78.6%
浏览 49
已结题

for循环中的点击事件函数异步过程如何解析

请教各位 以下代码是如何执行的,只知道是异步过程,alert为什么会弹出5,而不是点击哪个btn显示哪个btn的下标,想得到详细的解释

  <button>按钮1</button>
    <button>按钮2</button>
    <button>按钮3</button>
    <button>按钮4</button>
    <button>按钮5</button>
var btns = document.querySelectorAll('button')
for (var i = 0; i < btns.length; i++) {
        btns[i].onclick = function () {
            alert(i)
        }
    }
  • 写回答

4条回答 默认 最新

  • flashxie023 2021-08-26 14:38
    关注
    
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title></title>
        </head>
        <body>
            <div>
                <button>按钮1</button>
                <button>按钮2</button>
                <button>按钮3</button>
                <button>按钮4</button>
                <button>按钮5</button>
            </div>
            <script>
                var btns = document.querySelectorAll("button")
                for (var i = 0; i < btns.length; i++) {
                    btns[i].onclick = function() {
                        console.dir(event.target.innerText);
                    }
                }
            </script>
        </body>
    </html>
    for循环执行很快,事件监听时间实际是一个中断,你点击的时候,循环已经执行完毕,i在内存中已经是5了,所以永远会是5。
    可以用以上代码实现你要的效果
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 9月3日
  • 已采纳回答 8月26日
  • 创建了问题 8月26日