for(var i in data){
$('#test'+i).on('change',function(){
console.log(i);
})
}
每个元素触发事件都会显示最后一个data里的i,数组就是data.length-1
感觉是闭包相关的问题,请问该如何修改
PS:let的写法我知道 但是浏览器不兼容没法用
for(var i in data){
$('#test'+i).on('change',function(){
console.log(i);
})
}
每个元素触发事件都会显示最后一个data里的i,数组就是data.length-1
感觉是闭包相关的问题,请问该如何修改
PS:let的写法我知道 但是浏览器不兼容没法用
for (var i in data) {
(function (i) {
$('#test' + i).on('change', function () {
console.log(i);
})
})(i);
}
我来开个脑洞:既然是注册事件监听,那有没有可能把这个值当自定义数据传进去?
例如:
for(var i in data){
$('#test'+i).on('change', {value:i}, function(e){
console.log(e.data.value);
});
}
你可以这样理解:
var _bindToClick = function(idx){
$(".demo" + idx).on("click",function(){
alert( idx );
})
}
for(var i = 0; i < dom.length; i++ ){
_bindToClick(i);
}
用一个立即调用函数保存作用域,当一个函数嵌套另一个函数,函数定义时的作用域链到函数执行时依然有效.
<body>
<div>
<div id="test1">test1</div>
<div id="test2">test2</div>
<div id="test3">test3</div>
</div>
<script src="jquery.js"></script>
<script>
$(function() {
var data = [1, 2, 3];
for (var i = 0; i < data.length; i++) {
var e = data[i];
(function(e) {
$('#test' + e).on('click', function() {
console.log(e);
});
}(e));
/* $('#test' + i).on('click', function() {
console.log(i);
}); */
}
});
</script>
</body>
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
你可以试一试看看可以解决你的问题;
for(var i in data){
(function(i){
$('#test'+i).on('change',function(){
}