需要帮助使用navbutton和counter来显示&重置阵列序列

时间:2013-06-16 22:12:26

标签: javascript arrays button counter

我的目标是使用脚本开发一个非常简单的“制作你自己的故事”游戏引擎。现在,这段代码足以启动故事,但在列表中传递最终数组后会产生“未定义”。这是令人沮丧的,因为我确信我偶然发现了几次解决方案,但我不确切知道该怎么做。我只应该使用基本的JS,所以没有jquery,php等我知道那里应该有一个for循环/变量计数器。

HTML:

<p id="story">Hello.</p>


<input name="NavButton" type="button" 
value="Start" 
onclick= "OnPress();" />

JS:

function OnPress()
{
document.getElementById("story").innerHTML=myArray[i++];
}


var myArray = new Array();
myArray[0] = "Welcome to the Dark Abyss.";
myArray[1] = "There's a fork in the road. What to do?";
myArray[2] = "The fox doesn't talk much.";
myArray[3] = "Thank Grozia! You survived.";

var i=myArray.indexOf(myArray[0]);

3 个答案:

答案 0 :(得分:0)

您需要确保提供一个有效的索引,即您不会在数组末尾。在这种情况下,检查就足够了:

function OnPress()
{
if(i < myArray.length) // check that i is valid
  document.getElementById("story").innerHTML=myArray[i++];
else
  i = 0; // reset i back to start
}

答案 1 :(得分:0)

这是一个你正在寻找的简单迭代器。 我写了onPress而不是OnPress。你不应该用大写字母写方法名。

var myArray = [
"Welcome to the Dark Abyss.",
"There's a fork in the road. What to do?",
"The fox doesn't talk much.",
"Thank Grozia! You survived."
];

var current = -1;

function onPress()
{
    current = current >= myArray.length -1 ? 0 : current+1;
    document.getElementById("story").innerHTML=myArray[current];
}

答案 2 :(得分:0)

在两种情况下你会得到“未定义”:

  1. IE,不支持Array.indexOf。所以你总是得到“未定义”。
  2. 当i大于4时,会导致“Index out of range”错误,因此myArray [i ++]返回“undefined”。
  3. 为了解决问题,您可以尝试:

    1. 在开始时将i设置为0或者扩展Array.prototype以使Array.indexOf在IE中工作
    2. 每当我达到4时,将其重置为0或myArray.indexOf(myArray [0])(soenke和BIOS已经给你答案)。或者你可以使用i%= 4.
    3. 代码:

      function OnPress() {
          i %= 4;
          document.getElementById("story").innerHTML = myArray[i++];
      }
      
      var myArray = new Array();
      myArray[0] = "Welcome to the Dark Abyss.";
      myArray[1] = "There's a fork in the road. What to do?";
      myArray[2] = "The fox doesn't talk much.";
      myArray[3] = "Thank Grozia! You survived.";
      
      var i = 0;  
      

      希望它有用。