经典js问题

经典js问题

    var list = document.getElementsByTagName("li");  

    function foo(){  
        for(var i = 0, len = list.length; i < len; i++){  
            list[i].onclick = function(){  
                alert(i + "----" + this.innerHTML);  
            }  
        }  
    }  
    foo(); 

我们会发现运行结果是弹出 list.length,这是因为没有块级作用域造成的,解决办法由几个:

1.使用闭包

var list = document.getElementsByTagName("li");  

function foo(){  
    for(var i = 0, len = list.length; i < len; i++){  
        var that = list[i];  
        list[i].onclick = (function(k){  
            var info = that.innerHTML;  
            return function(){  
                alert(k + "----" + info);  
            };  
        })(i);  
    }  
}  
foo(); 

2.使用闭包

var list = document.getElementsByTagName(“li”);

function foo(){‘use strict’
for(let i = 0, len = list.length; i < len; i++){
list[i].onclick = function(){
alert(i + “—-” + this.innerHTML);
}
}
}
foo();

3.事件委托

var myul = document.querySelector('ul');  
var list = document.querySelectorAll('ul li');  

myul.addEventListener('click', function(ev){  
    var ev = ev || window.event;  
    var target = ev.target || ev.srcElemnt;  

    for(var i = 0, len = list.length; i < len; i++){  
        if(list[i] == target){  
            alert(i + "----" + target.innerHTML);  
        }  
    }  
});  

4.使用jquery的delegate和on进行事件绑定

<script type="text/javascript">  

$("ul").delegate("li", "click", function(){  
    var index = $(this).index();  
        var info = $(this).html();  
    alert(index + "----" + info);  
});  

</script>  

<script type="text/javascript">  

$("ul").on("click", "li", function(){  
    var index = $(this).index();  
        var info = $(this).html();  
    alert(index + "----" + info);  
});  

</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值