如何遍历无线电/复选框输入并将所选的id推送到数组

时间:2016-10-26 14:47:41

标签: javascript jquery arrays jquery-selectors

我已经建立了一个多项选择测验。有些答案有无线电盒,有些则有复选框,因为有多个正确的答案。我之前使用过一个脚本来获取所有:checked输入的id,并将它们放入一个数组中发送给服务器进行评估。

阵列看起来像这样:

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

我设法很容易地遍历所有:检查输入并将他们的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]值查找所有:检查输入,然后将其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()只返回匹配的第一个属性,因此在我的一些问题中,有4个复选框,用户可能已经检查了其中的3个,我就是这样做了只有第一个回到我身边。

如果有人可以帮我解决这个问题,那么它会插入所有的ID:已检查的输入会非常棒。谢谢!

2 个答案:

答案 0 :(得分:2)

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)
}

答案 1 :(得分:1)

你必须循环遍历结果元素才能逐个获取id。

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