Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单选按钮的JavaScript验证_Javascript - Fatal编程技术网

单选按钮的JavaScript验证

单选按钮的JavaScript验证,javascript,Javascript,下面是一个用HTML、CSS和JavaScript构建的测验,它有4个问题,我想选择问题的单选按钮,否则它会显示一个警告,说“请检查一个选项”,但它不起作用,我可以通过按下“下一步”按钮并将选项留空来跳过问题。 你知道怎么解决这个问题吗 let question1=document.getElementById('pytja1'); 让question2=document.getElementById('pytja2'); 让问题3=document.getElementById('pytja

下面是一个用HTML、CSS和JavaScript构建的测验,它有4个问题,我想选择问题的单选按钮,否则它会显示一个警告,说“请检查一个选项”,但它不起作用,我可以通过按下“下一步”按钮并将选项留空来跳过问题。 你知道怎么解决这个问题吗

let question1=document.getElementById('pytja1');
让question2=document.getElementById('pytja2');
让问题3=document.getElementById('pytja3');
让question4=document.getElementById('pytja4');
让结果=document.getElementById('bot-submit');
让nextButtons=document.querySelectorAll('.bot');
for(设i=0;i
表单{
宽度:100%;
位置:相对位置;
浮动:左;
填充顶部:50px;
}
.测验{
保证金:0px自动;
宽度:250px;
高度:100px;
位置:绝对位置;
顶部:60px;
左:42%;
}
.quest1,
.quest2,
.quest3,
.quest4{
背景色:卡德蓝;
字体大小:22px;
}
.问题1{
左边距:28px;
背景色:青色;
宽度:220px;
填充:10px;
字体大小:20px;
}
.问题2{
背景色:红色;
}
.问题3{
背景颜色:绿黄色;
}
.问题4{
背景色:淡褐色;
}
.机器人{
边缘顶部:10px;
}
#pytja2,
#pytja3,
#pytja4{
左边距:28px;
显示:无;
宽度:220px;
填充:10px;
字体大小:20px;
}

我是一个?
男性
女性
其他
足球有字母?
8
5
6
大众代表什么?
宝马
大众汽车
奥迪
现在是几年?
2017年
2015年
2019年

您可以通过调用下一步按钮的单击事件处理程序中的
validateForm()
函数来完成此操作。此函数返回布尔值,如果为真,请调用
switchToNextQuestion()

为了能够做到这一点,我们需要对您的代码进行一些轻微的修改

for (let i = 0; i < nextButtons.length; i++) {
  let nextQuestion = nextButtons[i];
  nextQuestion.onclick = function() {

    if (validateForm(i + 1)) {
      switchToNextQuestion(this);
    }
  };
}

我是一个?
男性
女性
其他
足球有字母?
8
5
6
大众代表什么?
宝马
大众汽车
奥迪
现在是几年?
2017年
2015年
2019年

非常感谢您的帮助,男士:)我有一个问题,为什么您要在“函数validateForm()”中添加“elementNumber”?不客气!:)您已为特定问题的单选按钮指定了名称,如第一个问题的“q1”,第二个问题的“q2”。。。通过告诉validateForm当前可见的问题,我们可以确定要验证的单选按钮。@obsecure-哦,现在得到了它,并将“q2、q3、q4”的名称更改为所有“q1”,并删除了elementNumber,它仍然工作,从未知道elementNumber并由您学习过。谢谢:)还有最后一个问题,如果您能为我澄清这一点的话“if(validateForm(i+1)){switchToNextQuestion(this);}”,“i”代表increment得到了它,但关于第1个,为什么要在那里添加?因为我们在一个数组上循环
let nextButtons=document.queryselectoral('.bot');
(从0开始)您从1开始对元素进行编号。;)嘿,Behar。问题是您正在“滥用”validateForm()函数来检查用户是否选择了正确的答案。不幸的是,此功能只检查用户是否选择了答案。我建议设置一个额外的数组userAnswer和validateForm()内部在这一行
if(radios[i].选中)
用‪ 选择的答案类似于
userAnswer.push(radios[i].value);
稍后您可以将其与答案数组进行比较。
function validateForm(elementNumber) {
  let radios = document.getElementsByName("q" + elementNumber);
  let formValid = false;
  let i = 0;
  while (!formValid && i < radios.length) {
    if (radios[i].checked) formValid = true;
    i++;
  }
  if (!formValid) alert("Select one option");
  return formValid;
}