2017-01-08 7 views
0

jqueryでselect要素から値を取得しようとしていますが、console.logが値がNaNであることを示しています。私はそれがIDの選択方法と関係しているかもしれないと思うが、わからない。インクリメンタルIDを持つ複数の入力ボックスから値を取得する

//Here I am creating the select element with the options in a loop and giving them an incremental ID. 
var div = $('<div class="containter">'); 
    $('.rForm').append(div); 
    for(var x = 0; x < 10; x++) 
    { 

     var h3 = $('<h3 style="margin-bottom: 5px;">' + "Question" + " " + (x + 1) + '</h3>'); 

     var label = $('<label>').attr('id', 'q'+ (x + 1)).text(questions[x]); 
     var br = $('<br>'); 
     div.append(label); 
     div.append(br); 
     var select = $('<select>').attr('id', 'q'+ (x + 1)); 

     for(var i = 0; i < 10; i++) 
     { 
      if(i === 0){ 
       select.append($('<option>').text(options[i])); 
      } 
      else{ 
       select.append($('<option>').attr('value', options[i].val).text(options[i].text)); 
      } 

      console.log('hi') 
     } 
     $('.containter').append(select); 

    } 


$('#submit').on('click', function(){ 

      // var answers = []; 


      var newProfile = { 
       name: $('#name').val().trim(), 
       photo: $('#link').val().trim(), 
       scores: [] 
      } 

      for(var x = 0; x < 10; x++){ 
       var num = $('#q' + (x+1)).val(); //Showing the value as NaN 
       console.log("num", num) 
       newProfile.scores.push(parseInt(num)); 
      } 

      console.log('new', newProfile); 
      console.log('scores' + newProfile.scores); 

     }); 
+0

申し訳ありませんが、質問が定義されている、イリノイ更新コード – henhen

+0

_ 'SELECT'が追加され_ "ここで私はselect要素を作成していますが" 'ドキュメント'に? – guest271314

+0

は、もっと詳細なコードを追加しましたが、はい、それはhtmlファイルに追加されます – henhen

答えて

0

むしろこれを実行します。

var questions = [{ 
 
    title: "Do you like jQuery ?", 
 
    expected: [0], 
 
    answers: [ 
 
    "yes", 
 
    "no" 
 
    ] 
 
}, { 
 
    title: "jQuery is :", 
 
    expected: [1], 
 
    answers: [ 
 
    "a language", 
 
    "a library", 
 
    "a framework" 
 
    ] 
 
}, { 
 
    title: "What is the type of jQuery.map() ?", 
 
    expected: [2], 
 
    answers: [ 
 
    "[a] -> b", 
 
    "[a] -> [b]", 
 
    "[a] -> (a -> Int -> b) -> [b]" 
 
    ] 
 
}]; 
 

 
$("form").html($.map(questions, function (q, i) { 
 
    return "" 
 
    + "<div>" 
 
    + "<h3>" + q.title + "</h3>" 
 
    + "<select " 
 
    +  "multiple " 
 
    +  "name=\"q" + i + "\"" 
 
    +  "size=\"" + q.answers.length + "\"" 
 
    + ">" 
 
    +  $.map(q.answers, function (a, j) { 
 
      return "<option value=\"" + j + "\">" + a + "</option>"; 
 
     }).join("") 
 
    + "</select>" 
 
    + "</div>"; 
 
}).join("") + (
 
    "<button type=\"button\">Submit</button>" 
 
)); 
 

 
$("button").click(function() { 
 
    var score = 0; 
 
    var $sel = $("select"); 
 
    $sel.each(function (i) { 
 
    var answers = $(this).val() || []; 
 
    var expected = questions[i].expected; 
 
    if (answers.join() == expected.join()) score++; 
 
    }); 
 
    alert(score + "/" + questions.length); 
 
});
body, h3, select, input {font: normal 12px Arial;} 
 
select {overflow: hidden;} 
 
div {margin-bottom: 1em;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form></form>

+0

「num」変数のNaNとして値が出てきた理由はありますか? – henhen

+0

@anonymousこれは 'options'配列の要素に部分的に依存しますが、その中に何が入っているのかはわかりませんでした。おそらくあなたのHTMLジェネレータがもっと面白いと思うかもしれません...しかし、最初のオプション(i = 0)を選択した場合は?このオプションには値が設定されていないので、 'parseInt'は失敗し、' NaN'を返します。 'parseInt(" ")'を試してください。とにかく、静的なHTMLコード*で始めるべきです。手書きで作成され、1つまたは2つのselect要素といくつかのオプションがあります。あなたはまったく同じ問題に直面しますが、私たちがチェックするのはずっと簡単です。 – leaf

+0

@anonymousそしてあなたのコメントに答えるためには、あなたのやり方はバグを起こす可能性が高いです。コードを整理してみてください。しかし、私は生成されたHTMLを楽しむ前に、あなたの質問にあるものをハードコードされたバージョンに置き換えます。 – leaf

関連する問題