在javascript中将元素添加到关联数组中

时间:2011-08-09 23:35:52

标签: javascript jquery loops associative-array

我正在尝试将元素添加到关联数组中,colors = [] 我希望它有["id":selected_color],但我的浏览器一直在崩溃(某个地方无限循环?)

我不确定我是否正确地将元素添加到数组中。

发生的事情是我点击了一个span元素,其ID值设置为十六进制值,我正在尝试捕获该值并将其与selected._color

<script type="text/javascript" src="jquery-1.6.2.js"></script>
<script type="text/javascript">

var selected_color = "";
var colors = [];

$(document).ready(function() {
    $(".color_cell").click(function(){
        // ADD MY COLOR TO SELECTED COLOR'S ASSOCIATIVE ARRAY       
        colors[$(this).attr("id")] = selected_color;
        console.log($(this).attr("id"));
        $(this).css({'background-color':'white'});
        $(this).unbind('click');
        updateDisplay(colors);
        alert("hi");
    });

    $(".btnColor").click(function(){
         // MAKE SELECTED COLOR BE ME
        alert("hey");
        selected_color = $(this).attr("id");
    }); // end button handler
}); // end ready()

function updateDisplay(colors) {
    jQuery.each(colors, function(key, value) {
        //it seems to crash here...
        $("#storage_display").html("var "+$("#storage_display").html()+" " +value);
    });
};
</script>

3 个答案:

答案 0 :(得分:7)

您将颜色定义为数组而不是对象。

您只需要正确初始化它:

 var colors = {}; // or new Object();

其他建议......这里真的不需要jQuery.each。迭代像这样的关联数组(让我们不要争论你是否可以实际称之为关联数组的语义)如下所示:

function updateColors(colors)
{
    for (var key in colors)
    {
        $("#storage_display").html("var "+$("#storage_display").html()+" " +colors[key]);
    }
}

答案 1 :(得分:1)

为什么不尝试一些普通的javascript而不是

colors[$(this).attr("id")] = selected_color; 

尝试使用

colors.push(selected_color);

而不是你的jquery循环,尝试使用

for(var i = 0; i < colors.length; i++) {
    $('#storage_display').html('whatever your trying to do here use colors[i]');
}

我不明白你在循环中想要做什么,但假设它确实有效,那么html就像'var var var var var var hexcode hexcode hexcode hexcode hexcode'

答案 2 :(得分:0)

除了ID属性必须以字母A-Z或a-z开头之前提到的所有内容。这可能会导致浏览器崩溃。

此外,如果您只在阵列中存储颜色,为什么不使用普通数组呢? (正如詹姆斯建议的那样)

相关问题