2013-05-01 2 views
0

Я думал, что решил свою проблему, используя for (var key in arr), предложенный here, но это вызывает проблемы в IE. Теперь я вернулся к первому.

var myVariable = []; 

myVariable['option-1'] = 'something'; 
myVariable['option-2'] = 'something else'; 
$.each(myVariable, function(index, value) { 
    alert(index + ': ' + value); 
}); 

Не работает. Ничего не видно. Может ли кто-нибудь изменить его, чтобы заставить его работать?

+0

методы массива не поддерживают именованные свойства. Используйте 'Object' (' {} ') * (а не' Array' ('[]')) * и цикл 'for ... in' – C5H8NNaO4

ответ

4

Просто используйте объект вместо массива:

var myVariable = {}; 
+0

запутан, когда код работает отлично в двух браузерах (FF и Chrome) и вовсе не в другом (IE). С изменением, которое вы предложили, даже IE, похоже, понимает мой код. Tnx – RST

+0

Это интересно, возможно, вы столкнулись с ошибкой jQuery; Я посмотрю. В любом случае вы всегда должны использовать объект, если вам нужны именованные ключи. – bfavaretto

+0

IE добавил элементы, которых там не было. Если у объекта/массива были два элемента myVariable ['options-2'] = 3 и myVariable ['options-5'] = 1. Тогда в IE у него будет третий элемент myVariable ['indexOf'], это значение было целым функция. – RST

1

Нет необходимости в jQuery.
Просто используйте for..in цикл (с объектом {} не массив []):

for(var index in myVariable) { 
    var value = myVariable[index]; 
    alert(index + ': ' + value); 
} 
3

Изменение var myVariable = []; в var myVariable = {};.

Синтаксис, который вы используете, myVariable['option-1'] = 'something'; предназначен для объектов, а не для массивов.

2

myVariable - это массив. Чтобы добавить вещи в массив, вы используете myVariable.push('something'). Вы используете синтаксис квадратной скобки, который обычно добавляет свойства объекту.

Поскольку массивы являются объектами, вы можете получить доступ к option-1, но он не является членом массива, это свойство объекта: myVariable['option-1']; // "something"

Решение установить myVariable к объекту. Метод jQuery each будет перебирать свойства объекта, как ожидалось.