2015-05-27 3 views
0

У меня возникла еще одна проблема с определением переменных. Он продолжает говорить, что переменная не определена. При печати он использует массив «rl» и нацеливает первую строку, а затем печатает ее. Он делает это несколько раз, пока не распечатал весь массив один за другим. Когда я меняю «rl [c]» (C - это текущее число в распечатанном массиве) на rl [1] или rl [2], он печатает его. Когда я печатаю c, выдает количество игроков ... что? Если вы можете мне помочь, это будет очень оценено. Javascript:Javascript: undefined & for loop issue

var al; 
var rl; 
var bd; 
function gp(){ 
    players = document.getElementById("input").value; 
    if(isNaN(players)){ 
     alert(players.toUpperCase() + "'s Players? Please Fix"); 
     return; 
    } 
    if(players === " "){ 
     alert("Please Define How Many People Are Playing!"); 
     return; 
    } 
    if(players === ""){ 
     alert("Please Define How Many People Are Playing!"); 
     return; 
    } 
    if(players < 4){ 
     alert("Sorry, You Need Atleast 4 Players To Play!"); 
     return; 
    } 
    SA(players) 
} 
function SA(players){ 
    var positions = ["Murderer", "Judge", "Innocent", "Innocent"]; //Pre-set positions 
    if(players == 5){ 
     positions.push("Co-Judge"); 
    }else if(players == 6){ 
     positions.push("Innocent", "Co-Judge"); 
    }else if(players == 7){ 
     positions.push("Murderer-2!", "Innocent", "Co-Judge"); 
    } 
    Randomize(players, positions) 
} 
function shuffle(o){ 
    for(var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x); 
    return o; 
} 
function Randomize(players, positions){ 
    rl = shuffle(positions); 
    al = positions.length; 
    confirm("You Have: " + al + " Players, Correct?"); 
    return rl; 
} 
var counter; 
var c; 
function DJ(){ 
    var bd = 0; 
    for(var c = 0; c < al + 1; c++){ 
     if(counter == 0){ 
      var tz = c.value; 
      document.getElementById("DS").innerHTML=("You Are A: " + rl[tz]); 
      document.getElementById("DJ").innerHTML=("Click To Clear!"); 
      counter = 1; 


     }else{ 
      document.getElementById("DS").innerHTML=("Click 'Display Your Job!'"); 
      document.getElementById("DJ").innerHTML=("Display Your Job!"); 
      counter = 0; 
     } 
    } 
} 

HTML:

<html> 
    <head> 
     <link href="Styles.css" type="text/css" rel="stylesheet"> 
     <script src="Javascript.js" language="javascript" type="text/javascript"></script> 
     <title>Miji</title> 
    </head> 
    <body> 
     <h1 id="mt">~*~ Miji ~*~</h1> 
     <div id="GetPlayers"> 
      <input maxlength="1" id="input"> <button id="gp" onclick="gp()">Start!</button> 
      <br/> 
      <br/> 
      <button id="DJ" onclick="DJ();">Display Your Job!</button> 
      <br/> 
      <span id="DS">1) Input Amount Of Players. 2)Click 'Display Your Job!'</span> 
     </div> 
    </body> 
</html> 

Обновление: TZ = c.value было проверить, если с в настоящее время устанавливается в строку или что-то ...

+0

«Он продолжает говорить, что переменная не определена». Какая переменная не определена? Что такое сообщение об ошибке? –

ответ

1

проблема заключается в том, что вы устанавливаете al в positions.length, а затем зацикливаете на al + 1. Помните, что javascript массивы основаны на 0.

Возьмем, например массив размером 4, как:

var myArray = [1,2,3,4]; 

Вы al = myArray.length установки, которая является 4, а затем цикл на первое значение меньше, чем 4 + 1, которая 4. Тем не менее, массив с длиной 4 имеет максимальный индекс 3, поэтому, когда ваш цикл доходит до последней итерации и устанавливает innerHTML в myArray[4], результат не определен.