0

我正在开发一个从 mysql 数据库中提取数据并将结果显示为单选按钮的测验。单选按钮是根据 key=>value 填充的,并通过简单的 forloop 生成。这已经做过很多次了,简单的谷歌搜索和研究将产生完成此任务所需的所有结果。我遇到或遇到的问题(在我决定只使用 jquery 执行此操作之前)是当我提交表单时,它将执行 javascript 函数以验证是否已选择按钮,但是当您选择其他任何选项时与第一个单选按钮相比,您会收到与未选择任何按钮时相同的“进行选择”警报。选择第一个单选按钮将返回 true 并执行 getCheckedValue 函数调用。好像,该脚本仅识别出我有一种输入类型,并且不理解遍历其余按钮。我已经重构了这个函数十几次,但仍然不知道为什么它不起作用。

<?php
    foreach ($dataReturn as $j => $value){
       echo "<input type='radio' class='answer' id='radiobtn' name='radiobtn' value='".$j."'>" .$value." </input><br/>";
    }
?>

上面是生成单选按钮的循环(仅供参考,$dataReturn 是一个混洗关联数组的返回值。(按预期工作)单击提交按钮时,它会调用下面的 javascript 函数。

    function isNull(){
    var isChecked = false;
    var radiobutton = document.getElementsByName('radiobtn');
    for (var i=0; i <= radiobutton.length; i++){
        if (radiobutton[i].checked){
            return true;
            var answer = radiobutton[i].value;
            getCheckedValue(answer);//using this just for testing selected value
        }else { 
        alert("Make a selection.");
        }
    return false;
    }
}

我只是不明白为什么这不起作用。如上所述,使用 jquery 可以完美地工作。

4

2 回答 2

0

试试下面的代码。在 for 循环完成之前,您不希望警报触发或返回 false。

 function isNull(){
    var isChecked = false;
    var radiobutton = document.getElementsByName('radiobtn');
    for (var i=0; i <= radiobutton.length; i++){
        if (radiobutton[i].checked){
            var answer = radiobutton[i].value;
            getCheckedValue(answer);//using this just for testing selected value
            return true;
        }
    }
    alert("Make a selection.");
    return false;
}

此外,您的 php 代码为所有单选按钮提供相同的 ID。那很不好; 这样做违反了 w3c 标准。

于 2012-12-21T19:07:51.413 回答
0
  1. 您的 FOR 循环:由于 JS 使用从零开始的数组,因此您不能拥有<=,否则它将寻找比您拥有的索引高一的索引。使用<代替;
  2. 我移动了您对是否在循环外检查了任何字段的验证,以使管理更容易。这种方式比担心在它们中间跳出循环更干净。

这里:

function isNull() {
    var isChecked = false;
    var radiobutton = document.getElementsByName('radiobtn');
    for (var i=0; i < radiobutton.length; i++) {
        if (radiobutton[i].checked) {
            isChecked = true;
        }
    }

    if ( !isChecked ) {
        alert("Make a selection.");
        return false;
    }
}

我不知道您的表单标签的外观,但如果没有选中单选字段,您需要这样做以防止表单提交:

<form action="" method="post" onSubmit="return isNull();">
于 2012-12-21T20:12:32.747 回答