美文网首页
闭包保存正确状态

闭包保存正确状态

作者: 大胡子111 | 来源:发表于2017-09-05 19:02 被阅读14次

    下面是一段很正常的代码,获取元素循环元素,点击其中一个li的时候弹出相对应的索引,为什么点击每一个li都弹出(点击的是第5个li')呢?因为循环跑的太快了,等你点击的时候当时的i值就是最后一个,怎么样才能解决?

     var lis = document.getElementsByTagName('li')
        console.log(lis);
        for(var i = 0; i < lis.length; i++) {
            lis[i].addEventListener('click', function () {
                alert('点击的是第' + i + '个li')
            },'false')
        }
    

    解决方案:

    1.闭包保存正确状态

        var lis = document.getElementsByTagName('li')
        console.log(lis.length)
        for (var i = 0; i < lis.length; i++) {
            (function (index) {
                lis[i].addEventListener('click', function () {
                    index=index+1
                    alert('点击的是第' + index + '个li')
                })
            }(i))
        }
    

    2.用jquery中的each

    $('li').each(function (index, item) {
        $(item).click(function () {
            alert('点击的是第' + index + '个li')
        })
    })
    

    相关文章

      网友评论

          本文标题:闭包保存正确状态

          本文链接:https://www.haomeiwen.com/subject/talpjxtx.html