0

基本上,我有一个大字符串要拆分,然后再拆分。

然后,我需要使用最小的拆分数组将其元素放入我页面上的文本输入中。

这是我的 Javascript

var splitquestions = vals[2].split('\n');

              //Loop to go through all current questions
              for (var i = 0; i < splitquestions.length - 1; i++) 
              {
                  //trigger a question add where a single question data can be added into
                  $( "#add" ).trigger('click');

                  //split current question into separate items
                  var s = splitquestions[i].split(',');

                  //Loop to go over all sections in a question
                  var count = 0;
                  for(var j = 0; j < s.length; j++)
                  {
                      count = count + 1;
                      var qs = document.getElementById('questions[' + j +'][' + count + ']').value;

                      qs = s[j];

                  }

              }

页面上会有很多问题,取决于用户想要添加多少。每个新问题块将包含一个问题、3 个错误答案和 1 个正确答案。

出错的部分在最后一个循环中。这就是我需要抓取“s”数组中的每个单独元素,并将其放置在每个文本输入中的地方。

这是原始数据在被“splitquestions”变量分割之前的显示方式:

question1,incorrect-answer1,incorrect-answer2,incorrect-answer3,correct-answer
question2,incorrect-answer1,incorrect-answer2,incorrect-answer3,correct-answer
question3,incorrect-answer1,incorrect-answer2,incorrect-answer3,correct-answer

从上面可以看出,每个问题都用换行符分隔,即 \n,然后每个单独的部分用逗号分隔。

每个问题输入都有一个分配给其 ID 的多维变量。例如,使用上面的数据,第一行数据以及第一个元素(即 question1)将是 question[1][1]。另一个示例是第三行数据中的“不正确答案1”,即问题[3][2]。第一个数字是问题编号,第二个数字是元素编号。

我希望我已经解释得足够好,因为我对如何自己解释它有点困惑,因为我是多维数组和循环内循环的新手。因此,如果您需要任何其他信息,请发表评论,我会尽力而为。

如果需要,这是动态创建问题元素的函数:

function dynamicForm () {

    //set a counter
    var i = $('.dynamic-input#form-step2').length + 1;
    //alert(i);
    //add input
    $('a#add').click(function () {
        $('<table><tr><td><p><span class="left"><input type="text" class="dynamic-input" name="questions[' +i +'][1]" id="' + i + '" placeholder="Question" /></span>' + '<span class="right"><input type="text" class="dynamic-input" name="questions[' +i +'][2]" id="' + i + '" placeholder="Distraction 1" /><br /><input type="text" class="dynamic-input" name="questions[' +i +'][3]" id="' + i + '" placeholder="Distraction 2" /><br /><input type="text" class="dynamic-input" name="questions[' +i +'][4]" id="' + i + '" placeholder="Distraction 3" /><br /><input type="text" class="dynamic-input" name="questions[' +i +'][5]" id="' + i + '" placeholder="Correct Answer" /><br /><a href="#">Remove</a></span></p></td></tr></table>').fadeIn("slow").appendTo('#extender');
        i++;

        $("a:contains('Remove')").click(function () {
                $(this).parent().parent().remove();
        });

        return false;
    });


    //fadeout selected item and remove
    $("#form-step2.dynamic-input").on('click', 'a', function () {
        $(this).parent().fadeOut(300, function () {
            $(this).empty();
            return false;
        });
    });
}
4

1 回答 1

2

在与 OP 进一步讨论后,我们修复了代码,最终如下所示。基本上,他的输入数字是从索引 1 而不是 0 开始的,所以这是问题之一。他还试图id在所讨论的输入只有一个name属性时进行选择。

//Loop to go over all sections in a question
for (var j = 1, len = s.length; j <= len; j++) { 
    $('input[name="questions[' + (i + 1) + '][' + j + ']"]').val(s[j - 1]); 
}
于 2013-08-16T13:20:40.077 回答