有史以来第一个问题,编程新手。我会尽量简洁。
我想要做的是在选定的div中创建一堆子节点,并为每个子节点提供特定的html内容(来自预定义的数组),并为每个子节点提供不同的id。
我为效果创建了这个循环:
Game.showOptions = function() {
var i = 0;
Game.choiceElement.html("");
for (i=0; i<Game.event[Game.state].options.length; i++) {
Game.choiceElement.append(Game.event[Game.state].options[i].response);
Game.choiceElement.children()[i].attr("id","choice1");
}
};
使用数组的预定义值:
Game.event[0] = { text: "Hello, welcome.",
options: [{response: "<a><p>1. Um, hello...</p></a>"},
{response: "<a><p>2. How are you?</p></a>"}]
};
此方法似乎不起作用,因为循环仅在一次迭代后停止运行。我真的不知道为什么。如果有一种完全不同的方式来获得我需要的东西,我会全力以赴。
如果我在数组中定义每个p的id属性,它可以工作,但我想避免这种情况。
这个想法是创建一个完整功能的对话选择算法(基于文本的RPG风格),可以使用预定义的数组。
提前致谢。
答案 0 :(得分:0)
我看到你的循环问题可能在几个不同的地方。以下是您应该检查的三件事,我假设您有,但只是没有告诉我们......
Game
是否定义为对象?
var Game = {};
将event
定义为数组吗?
Game.event = new Array();
Game.state
是否会返回一个数字,以及相应的数字?我想这会比我在这里写的更有活力,但希望你能得到这个想法。
Game.state = 0;
现在假设上述所有方法都正常运行......
使用eq(i)
代替[i]
。
for (var i = 0; i<Game.event[Game.state].options.length; i++) {
Game.choiceElement.append(Game.event[Game.state].options[i].response);
Game.choiceElement.children().eq(i).attr("id","choice" + (i + 1));
}
这是JSFiddle。