Добавление элементов в ассоциативный массив в JavaScript - PullRequest
1 голос
/ 10 августа 2011

Я пытаюсь добавить элементы в ассоциативный массив, который равен colors = [] Я хочу, чтобы он имел ["id":selected_color], но мой браузер продолжает падать (бесконечный цикл где-то?)

Яне уверен, правильно ли я добавляю элементы в массив.

Происходит то, что я нажимаю на элемент span, значение его ID которого равно значению hexcode, и я пытаюсьчтобы захватить это значение и связать его с 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 ]

7 голосов
/ 10 августа 2011

Вы определяете цвета как массив, а не как объект.

Вам просто нужно правильно инициализировать его:

 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 голос
/ 10 августа 2011

Почему бы вам не попробовать обычный 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 hex hex hexcode hexcode hexcode hexcode"

0 голосов
/ 10 августа 2011

Помимо всего, что было упомянуто до того, как атрибуты ID должны начинаться с буквы AZ или az.Это может привести к сбою вашего браузера.

Кроме того, если вы храните цвета только в своем массиве, почему бы не использовать обычный массив?(как полагает Джеймс)

...