如何遍历 radio/checkbox 输入并将所选输入的 ID 推送到数组

How to loop through radio/checkbox inputs and push the id of selected ones to arrays

我制作了一个多项选择测验。有些答案有单选框,有些答案有复选框,因为有多个正确答案。我以前使用脚本获取所有 :checked 输入的 ID,并将它们放入一个数组中以发送到服务器进行评估。

数组如下所示:

userAnswers = [ '1c', '2d', '3a', '3b', '3c', '3d', '4b', '5c', '5d', '6d' ]

我已经设法很容易地遍历所有 :checked 输入并将它们的 html id 添加到一个数组中,但是我需要更改我的数据结构以便更容易地评估答案服务器。

我正在尝试将数据结构更改为以下内容:

answers = [
  ['c'], // Question 1 answers
  ['d'], // Question 2 answers
  ['a', 'b', 'c', 'd'], // 3
  ['b'], // 4
  ['c', 'd'], // 5
  ['d'], // 6
]

为此,我尝试创建一个循环,根据它们的 [data-question-number] 值查找所有 :checked 输入,然后将它们的 html ID 添加到数组中,然后添加该数组到上面的数组。

到目前为止,我得到的最接近的是:

let numberOfQuestions = Assessments.findOne().numQuestions; //returns the number of questions in the quiz e.g '25'
let selectedAnswers = [];

for(let i = 1; i <= numberOfQuestions; i++) {
    let answers = $("input[data-question-number=" + i + "]:checked").attr('id');
}

这几乎可以工作,除了问题是 .attr() 只有 returns 第一个匹配的属性,所以在我的一些问题中有 4 个复选框,用户可能已经选中了其中的 3 个, 我只会把第一个还给我。

如果有人可以帮助我修改它,以便它插入所有 :checked 输入的 id,那就太棒了。谢谢!

您必须循环遍历结果元素才能一个一个地获取 ID。

for(let i = 1; i <= numberOfQuestions; i++) {
    let answers = []
    $("input[data-question-number=" + i + "]:checked").each(function() {
      answers.push(this.id)
    });
}
let answers = []
for(let i = 1; i <= numberOfQuestions; i++) {
    let temp = []
    $("input[data-question-number=" + i + "]:checked").each(function() {
       temp.push(this.id)
    });
    answers.push(temp)
}