如何循环通过单选/复选框输入并将所选输入的 id 推送到数组

Posted

技术标签:

【中文标题】如何循环通过单选/复选框输入并将所选输入的 id 推送到数组【英文标题】:How to loop through radio/checkbox inputs and push the id of selected ones to arrays 【发布时间】:2017-03-09 00:06:54 【问题描述】:

我已经建立了一个多项选择测验。有些答案有无线电框,其他答案有复选框,因为有多个正确的答案。我之前使用过一个脚本来获取所有 :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
]
要执行此操作,我正在尝试创建一个找到的循环:基于它们的[数据问题编号]值检查的输入,然后将其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个,我只会得到第一个还给了我。

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

【问题讨论】:

【参考方案1】:
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)

【讨论】:

【参考方案2】:

您将不得不循环遍历结果元素以逐个获取 id。

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

【讨论】:

谢谢,这绝对有帮助,但我接受的答案 100% 解决了问题。非常感谢

以上是关于如何循环通过单选/复选框输入并将所选输入的 id 推送到数组的主要内容,如果未能解决你的问题,请参考以下文章

html Gravity Wiz // Gravity Forms // GF 1.8.21单选按钮和复选框输入ID更改

html Gravity Wiz // Gravity Forms // GF 1.8.21单选按钮和复选框输入ID更改

单选按钮/复选框/选择选项 - 添加所选项目的价格(价值)总计,并将它们添加到数组中

Selenium—选择框的相关操作(单选框多选框复选框下拉框)

将唯一 id 附加到 simple_form 生成的单选按钮输入,并将匹配值附加到关联标签

如何在 Bootstrap 4 模态表单中重置单选按钮和复选框? [复制]