验证单个单选按钮在可用的javascript验证脚本中不起作用

验证单个单选按钮在可用的javascript验证脚本中不起作用,javascript,validation,radio-button,Javascript,Validation,Radio Button,我随机生成了单选按钮系列,如 <input type="radio" name="creatorusers" value="1"> <input type="radio" name="creatorusers" value="1"> <input type="radio" name="creatorusers" value="1"> <input type="radio" name="creatorusers" value="1"> .....so

我随机生成了单选按钮系列,如

<input type="radio" name="creatorusers" value="1">
<input type="radio" name="creatorusers" value="1">
<input type="radio" name="creatorusers" value="1">
<input type="radio" name="creatorusers" value="1">
.....so on

您可以这样做:

function validate(frm){
    var isChecked = false;

    for (var i=0; i<frm.elements.length; i++)
    {
       if (frm.elements[i].type === 'radio'){
         if (frm.elements[i].checked === true){
           isChecked = true;
           break;
         }
       }
    }

    if (isChecked === true){
       return true;
    }
    else{
       alert('You should select an option first !');
    }
}

现在,
validate
功能将确保至少选中一个单选按钮,否则它将不会提交。

啊,现在我知道了。如果只有一个单选按钮,则
frm.creatorusers
不是数组。跳过它:

var mycreator = -1;
var checked = false;

if(typeof frm.creatorusers.length === 'number') {
    for (var i=frm.creatorusers.length; i--; ) {
      if (frm.creatorusers[i].checked) {
          mycreator = i;
          checked = true;
          break;
      }
    }
}
else if(frm.creatorusers.checked){
    mycreator = //? what here?
    checked = true;
}

if(!checked) {
     alert("You must select a Creator User!");
     return false;
}
如果
mycreator
仅用于检查按钮是否被选中,则可以将其从上述代码中完全删除

对代码的进一步说明:

  • 始终使用
    var
    声明变量,否则它们将是全局变量
  • 使用
    break
    结束循环
  • 也许这只是因为复制和粘贴的缘故,但拥有许多具有相同值的单选按钮并没有多大意义
始终(!)使用var关键字。否则,您的变量将在全局范围内(是的,甚至是函数体中的变量),这可能导致一些难以跟踪的错误

正如,
creatorusers
仅当表单中有多个同名元素时才是数组。您可以在必要时创建单个元素数组来解决此问题

下面是一个抽象函数,它可以验证任意复选框列表

function ensureChecked(checkboxes, error) {
  if (checkboxes) {
    var cbx = (checkboxes.length > 0) ? checkboxes : [checkboxes]; 
    for (var i=0; i<cbx.length; i++) {
      if (cbx[i].checked) {
        return true;
      }
    }
    alert(error);
  }
  return false;
}
这应该可以

function isRadioSelected(btn) {

    if(typeof btn.length === 'number') {
        for(var i=0;i<btn.length;i++)
            if(btn[i].checked) return true

    }else{
        if(btn.checked) return true
    }

    return false

}
功能已选定(btn){
如果(btn.length的类型=='number'){

对于(var i=0;i您可以尝试以下方法:

<html>
<head>
<script type="text/javascript">     
function confirmsubmit() {
       var btn = document.formname.buttonname

       if (btn.checked == false) 
       {
        window.alert("You did not click the button.");
        btn.focus();
        return false;
        }

        return true;
}
</script>
</head>

<body>

<form method="post" action="mailto:youremail@yourdomain.com" 
name="formname" onsubmit="return confirmsubmit();">
click here: <input type="radio" name="buttonname"><br />

    <p><input type="submit" value="Submit" name="submit"></p>

</form>

</body>
</html>

函数confirmsubmit(){
var btn=document.formname.buttonname
如果(btn.checked==false)
{
window.alert(“您没有单击按钮”);
btn.focus();
返回false;
}
返回true;
}
单击此处:


当我提醒“frm.creatorusers.length”时,我会收到“未定义”的警告,但在另一侧,当单选按钮上有多个时,则此验证有效。身份比较很好,但可能是您做得太多了吗?:)例如,
isChecked
在您的代码中只能是布尔值,因此
return isChecked
是一个安全的赌注。另外,
j
是什么?j是什么来自?我编辑您的答案是为了在函数中传递表单,如果表单上没有ID,则不使用getElementById。请参阅本页上我的其他注释。最后一点是,您的答案是Kling,它只是一个示例,因此只是一个复制粘贴,其次,您的代码不起作用,它总是给出消息“您必须选择一个创建者用户!”@OmtheEterminance:代码对我有效:可能还有其他错误。我得到以下错误:frm.creatorusers未定义[Break On this error]var rdo=(frm.creatorusers.length>…rm.creatorusers:frm.creatorusers;infirebug@OMThe:这意味着
frm.creatorusers
未定义(duh)。显然,始终没有使用此名称的表单字段。只需事先检查它是否存在。(这也意味着您不是在真正使用我的代码,而是在使用其他内容。我不明白您当时为什么接受我的答案,以及为什么在代码停止工作时取消接受它。)确保通过表单!!!
onsubmit=“return validate(this)”
-这也会使表单的命名变得不必要。但是,如果您使用document.getElementById(“表单的ID”)确保表单有一个ID而不仅仅是一个名称。IE将允许getElementById(“表单的名称”),但其他浏览器将不允许
ensureChecked(frm.creatorusers, "You must select a Creator User!");
function isRadioSelected(btn) {

    if(typeof btn.length === 'number') {
        for(var i=0;i<btn.length;i++)
            if(btn[i].checked) return true

    }else{
        if(btn.checked) return true
    }

    return false

}
<html>
<head>
<script type="text/javascript">     
function confirmsubmit() {
       var btn = document.formname.buttonname

       if (btn.checked == false) 
       {
        window.alert("You did not click the button.");
        btn.focus();
        return false;
        }

        return true;
}
</script>
</head>

<body>

<form method="post" action="mailto:youremail@yourdomain.com" 
name="formname" onsubmit="return confirmsubmit();">
click here: <input type="radio" name="buttonname"><br />

    <p><input type="submit" value="Submit" name="submit"></p>

</form>

</body>
</html>