javascript - for 循环(事件)中的闭包问题

标签 javascript jquery closures

下面是一个循环,它创建了六个不同颜色的框。单击框时,变量“颜色”会更改为框的颜色。代码有一个明显的问题,那就是闭包(所有框都获得数组中的最后一个类,并且 boxColors[i] 不可能在事件中使用(未定义)。

如何优雅地解决这个问题?提前致谢。

var boxColors = ['red', 'green', 'blue', 'yellow', 'white', 'black'];

for (var i = 0; i < boxColors.length; i++){
    $('<div/>', {
        'class': boxColors[i]
    }).appendTo(toolboxSection1).click(function(){
        color = boxColors[i];
    });     
}

最佳答案

JavaScript closure inside loops – simple practical example 中描述了此问题的示例以及在一般情况下如何解决它.

但是,jQuery 允许您将附加数据传递给事件处理程序(请参阅 documentation ),这是解决此问题的另一种方法:

for (var i = 0; i < boxColors.length; i++){
    $('<div/>', {
        'class': boxColors[i]
    })
    .appendTo(toolboxSection1)
    .click({color:  boxColors[i]}, function(event){
        // event.data.color
    });     
}

关于javascript - for 循环(事件)中的闭包问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8796297/

相关文章:

grails - 使用 Curry 定义 Grails 标签

javascript - 如果 Javascript 中的 "with"语句创建了一个新的作用域,为什么这个闭包每次都不包含新作用域中的新的 "x"?

具有固定导航栏的 Javascript 不起作用

php - 使用 mysql 数据对分页表进行排序

javascript - IE 中的 jQuery fadeIn/fadeOut 弄乱了布局

javascript - 如何给不同的 append 元素添加js代码?

javascript - 我应该使用媒体查询并转换 : translateY(-%) to above the mobile keyboard?

javascript - 使用 Javascript .click 插入 Css(为时已晚)

javascript - MediaRecorder - 是否可以同时录制和播放?

JavaScript 闭包与本地