2011-05-10 99 views
0

我想使这个简单的代码创建3个选择题的JSON数据, 因为理由超出我的理解会发生什么是一个永恒的循环,在这最后一个问题是一次又一次地写入页面,直到它崩溃... 帮助和建议将不胜感激。在一个简单的HTML表单创建循环中的永恒循环

var questions = { 
"qestion":["what is bla?", "what is bla bla?", "what is bla bla bla?"], 
"answer":[["aaa","bbb","ccc","ddd"], ["eee","fff","ggg","hhh"], ["zzz","xxx","yyy","www"]], 
"correctAns":[1,2,3]}; 

String.prototype.format = function() { 
    var formatted = this; 
    for (i=0; i< arguments.length; i++) { 
     var regexp = new RegExp('\\{'+i+'\\}', 'gi'); 
     formatted = formatted.replace(regexp, arguments[i]); 
     } 
    return formatted; 
}; 

function writeQuestions() { 

    for (i=0 ;i<=2; i++) { 

      answerRdy = []; 
      qestionRdy = questions.qestion[i]; 
      answerRdy[0] = questions.answer[i][0]; 
      answerRdy[1] = questions.answer[i][1]; 
      answerRdy[2] = questions.answer[i][2]; 
      answerRdy[3] = questions.answer[i][3]; 
      divID = "question-" + i; 

       writeAnswer = []; 
       writeAnswer[writeAnswer.length] = ("\n<div id='{0}'>\n<form method='post' onsubmit='return validate(this);'>\n").format(divID); 
       writeAnswer[writeAnswer.length] = ("<b>" + qestionRdy + "</b><br />\n"); 
      for (n=0; n<=3; n++) { 
       writeAnswer[writeAnswer.length] = ("<input type='radio' name='answer' value='{0}' /> {1} <br />\n").format(n, answerRdy[n]); 
        } 
       writeAnswer[writeAnswer.length] = ("<input type='submit' value='Submit your answer'>\n</form>\n</div><!--{0}-->").format(divID); 


      joinQuestion = writeAnswer.join(); 
       exp = /,/gi; 
      fullQuestion = joinQuestion.replace(exp, ""); 

     $('#container').append(fullQuestion); 
    } 
} 

回答

1

我改变了你for循环为iteration声明局部变量,并且还将终止长度链接到适当的对象,这似乎是诀窍。例如:

for (i=0 ;i<=2; i++) { 

变成了:

for (var i = 0, len = questions.answer.length; i < len; i++) { 

See example →

+0

感谢名单,但我应该怎么改? String.prototype.format或writeQuestions()? – ilyo 2011-05-11 05:26:07

+0

哦!有用!比你 :) – ilyo 2011-05-11 05:35:16

1

难道是因为你有两个为使用一个未声明的魔法全局变量回路“我”

for (i=0... 

,它应该最有可能是

for (var i=0...