2015-05-07 100 views
0

我似乎有我的JSON对象的问题,这是不寻常的,因为我有一个代码块,我知道作品:追加从JSON特定元素的数据对象

function gotoPassage(id) { 
    for (var i = 0; i < passages.length; i++) { 
     if (passages[i].id == id) { 
      if (passages[i].bgImage) 
       changeBGImage(passages[i].bgImage); 

       $("#passage").hide(); 
       $("#passage").html(passages[i].content); 
       $("#passage").fadeIn(1000); 
      } 
     } 
    } 

上面的代码按预期工作,所以我采用了相同的逻辑并将其应用于我的其他代码,顺便说一下,它无法正确显示。此代码目前看起来是这样的:

function showLoreHistory() { 
    $("#lore ul").html(""); 
    for (var i = 0; i < foundLore.length; i++) { 
     var content = "<li><a href='javascript:gotoLore(" + foundLore[i].id ");'>"; 
     for (var j = 0; j < lore.length; j++) { 
      if (lore[j].id == foundLore[i].id) { 
       content += lore[j].title + "</a></li>"; 
       $("#lore ul").append(content); 
       break; 
      } 
     } 
    } 

    $("#lore").toggle(); 
} 

lorefoundLore看起来像这样的结构:

var lore = [{ 
    "id": 0, 
    "title": "The First War", 
    "image": "Images/The First War.jpg", 
    "pages": [{ 
      "content": "" 
     }] 
}]; 

var foundLore = [{ 
    "id": 0 
}]; 

我想通过每个JSON对象的键进行迭代,却发现它看起来丑陋的,并考虑到我以前的逻辑显示的段落工作假定相同的逻辑会为我的传说工作,但它似乎并不。

我想出了一个JSFiddle,但不幸的是我依靠太多的本地资源来正常工作而不牺牲代码,这会破坏我解释问题的重点。

编辑:如果我注释掉函数showLoreHistory中的for循环,页面将在following image中按预期正确渲染。

编辑2:我想要做的是从上面的JSON对象中获取值并将值添加到HTML下的div标签,即lore - 默认情况下隐藏。

div标签,其内容如下:

<div id="lore"> 
    <h1>Lore</h1> 
    <ul> 

    </ul> 
</div> 

如果您对此任何解决方案,我会强烈感激。谢谢。

+2

你是什么意思“不起作用”?......不显示在屏幕上?或没有找到正确的值?要么...? –

+0

对不起,由于不工作,我的意思是页面呈现不正确。我将重新编辑我的“不工作”部分。 – tienery

+0

什么是“丑陋”?丑陋的JSON对象是怎么样的?请更具体地说明一下你的JS对象,以及你如何获得它,以及你期望获得什么。因为“不清楚你在问什么”而被标记为关闭 – JotaBe

回答

1

此行

var content = "<li><a href='javascript:gotoLore(" + foundLore[i].id ");'>"; 

缺少一个 '+' 后foundLore [I] .ID

而且,切换可能不是你想要的。我认为你应该在函数的开头隐藏它,然后像展示图像的其他函数那样显示它。

如果你打开开发工具(f12或ctrl + shift + j),它会显示你这样的错误。

p.s.它花了2分钟时间,为我找到问题提供了一个小提琴。下次给它一个镜头。

http://jsfiddle.net/8cr9t1zy/2/ 由于上面提到的toggle()事情,您必须按两次按钮。

+0

哇,我不知道我是如何设法错过的......我想我需要一对以上的眼睛来弄清楚。谢谢:) +1 – tienery