6

クイズの質問を取得するために必要な JSON ファイルがあります。今のところ、質問をオブジェクトとして配列に格納しているだけです。各質問オブジェクトには、'text' (質問自体)、'choices' (可能な回答の配列)、'answer' (正解の選択肢の場所に対応する int) があります。

質問オブジェクトが正しく保存されていることを確認するにはどうすればよいですか? 質問のリストを作成したいのですが、リストに question[i].text を入力しようとしましたが、うまくいきませんでした。何が起こっているのかをデバッグするために Firebug をインストールしましたが、それを最大限に活用する方法が完全にはわかりません。

JSON の形式は次のとおりです。

{
"text": "What does the author least like about Eclipse?", 
"choices": [
    "The plugin architecture.",
    "FindBugs.",
    "Refactoring.",
    "The Run As menu."],
"answer": 3
}

私の JavaScript ファイル:

$(document).ready(function(){

var questions=[];
$.getJSON('quiz.js',function(data){

     var i=0;
     for(i=0;i<data.length;i++){
        questions[i]=[String(data[i].text),String(data[i].choices),int(data[i].answer)];

    }

    var list = $('#list')
    $(questions).each(function(_, text) {
    var item = $('<li/>')
    var link = $('<a/>').html(text)
    link.click(function() { alert(text) })
    item.append(link)
    list.append(item)
    })

    $('#list').listview('refresh')


});
})

最後に、いくつかの HTML:

 <div data-role="content">
    <ul id="list" data-role="listview">
    </ul>
</div>

長い質問だと思いますが、助けていただければ幸いです。最終的な目標は、クリックすると回答の選択肢が表示され、選択したオプションが正しいかどうかをユーザーに通知するトーストを提供する質問のリストを作成することです。また、正しく答えられた場合は緑で、そうでない場合は赤で、リスト内の質問を強調表示したいと思います。

編集:

作業コード:

$(document).ready(function(){

$.getJSON('quiz.js',function(data){

var questions = data;
var list = $('#list')

$(questions).each(function(index, object) {

 $.each(object, function(key, value){

    if(key === 'text'){
        //do something with qustion

            var item = $('<li/>')
            var link = $('<a/>').html(value)
            link.click(function() { alert(value) })
            item.append(link)
            list.append(item)
            $('#list').listview('refresh')
        }

      });
    });

  });
});
4

4 に答える 4

2

あなたはeach1つを間違って使用しています。2 番目に、JSON 応答でオブジェクトのオブジェクトを取得していることを認識する必要があります。質問/回答データを含む各オブジェクトを反復し、その質問/回答オブジェクトをさらに反復する必要があります。さらに、そのネストされたオブジェクトにネストされた配列があり、それをループして質問を取得する必要があります。擬似コードを見てみましょう:

//will give you each object your data
$.each(data, function(key, object){

    //do something with my [Object, Object]
    $.each(object, function(key, value){

        if(key === 'text'){
            //do something with qustion
        }

        if(key === 'choices'){
            //loop over array
        }
    }
}
于 2013-10-25T14:35:17.987 に答える
0

これを試して..

var ques=[];
$.getJSON('quiz.js',function(data){
for(var i in data)
{
var text =data[i].text;
var choic=data[i].choices;
var output='<li>'+text+'</li>';
}
$('#list').empty().append(output);
});
于 2013-10-25T04:52:49.160 に答える
0

選択肢にたどり着いたときに、実際に選択肢の配列を繰り返し処理していますか? ここにフィドルがあります

jQueryで見つかったものを使用する必要があるか、$.each純粋なjavascriptが必要な場合

for (property in object) {
  if (object.hasOwnProperty(property)) {
    // do stuff
  }
} 
于 2013-10-25T05:33:17.737 に答える
0

私が理解できる限り、これquestionsはいくつかの要素の配列です。これらの要素は、3 つの要素 (テキスト、選択肢、回答) の配列です。

eachステートメントのjqueryセレクターで質問配列を使用しています。

以下は、あなたが望むことを行うためのより良い方法です:

$.each(questions, function (i, value) {
    var text = questions[i][0];
    var choice = questions[i][1];
    var answer = questions[i][2];
    var output='<li>'+text+'</li>';
    // rest of your code using text, choices and answers
});
于 2013-10-25T05:41:17.090 に答える