我正在尝试将元素添加到关联数组中,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>
答案 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开头之前提到的所有内容。这可能会导致浏览器崩溃。
此外,如果您只在阵列中存储颜色,为什么不使用普通数组呢? (正如詹姆斯建议的那样)