2011-05-10 72 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...