Я ожидаю, что следующее будет предупреждать "game1", а затем "game2", но ничего не предупреждает
var pages = [{
"menuMain": {
"pageTitle": "game1",
"leftButtonText": "back",
"leftButtonHREF": "#mainPage",
"rightButtonText": "Close",
"rightButtonHREF": "#mainPage"
},
"subMenu": {
"pageTitle": "game2",
"leftButtonText": "back",
"leftButtonHREF": "#mainPage",
"rightButtonText": "Close",
"rightButtonHREF": "#mainPage"
}
}]
$.each(pages, function (id, page) {
alert(page.pageTitle);
});
EDIT: обновлено, чтобы сделать вопрос более ясным
Вы повторяете pages
которые являются массивом dict, попробуйте:
alert(page.menuMain.pageTitle);
Параметр page
в вашей функции обратного вызова является непосредственным членом массива, который в вашем случае: {"menuMain":{..}} object
.
Поэтому вы должны сделать это так:
$.each(pages, function(id, page) {
alert(page.menuMain.pageTitle);
});
редактировать
Если вы заранее не знаете свойства, это может быть правильный путь:
$.each(pages, function(id, page) {
for(var pageSection in page) {
if(page.hasOwnProperty(pageSection)) {
//This block will loop for every
//top-level property in your members
//This will alert "menuMain" or "subMenu"
alert(pageSection);
//This will alert "game1" or "game2"
alert(page[pageSection].pageTitle);
}
}
});
Проблема в том, что вы нажимаете только элемент верхнего уровня вашего объекта.
Измените следующим образом, и вы получите то, что ожидаете:
$.each(pages.menuMain, function(id, page) {
alert(page.pageTitle);
});
pages
является массивом. Он содержит один элемент, объект. Этот объект имеет свойствоmenuMain
.