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

Posted

技术标签:

【中文标题】验证单个单选按钮在可用的 javascript 验证脚本中不起作用【英文标题】:Validating a single radio button is not working in available javascript validation script 【发布时间】:2011-06-02 05:20:58 【问题描述】:

我有随机生成的单选按钮系列,比如

<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

但我只得到一个单选按钮并执行为其提供的 javascript 验证以检查单选按钮是否被选中,然后它不起作用 请帮我解决这个问题。

mycreator = -1;

  for (i=frm.creatorusers.length-1; i > -1; i--) 
  if (frm.creatorusers[i].checked) 
  mycreator = i; i = -1;
  
  
  if (mycreator == -1) 
  alert("You must select a Creator User!");
  return false;
  

【问题讨论】:

当我提醒“frm.creatorusers.length”时,我会收到“未定义”的警报,但在另一边,当有多个单选按钮时,此验证工作正常 【参考方案1】:

你可以试试这样的:

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

【讨论】:

【参考方案2】:

应该这样做

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


【讨论】:

【参考方案3】:

你可以这样做:

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 !');
    

现在你应该在onsubmit 形式的事件上调用上述函数:

<form onsubmit="return validate(this);">

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

【讨论】:

身份比较很好,但可能是你做得过火了吗? :) 例如isChecked 在你的代码中只能是布尔值,所以return isChecked 是一个安全的选择。另外,j 是什么? “j”是从哪里来的? 我编辑了您的答案以在函数中传递表单,如果表单上没有 ID,则不使用 getElementById。在此页面上查看我的其他评论【参考方案4】:

始终 (!) 使用 var 关键字。否则,您的变量将在全局范围内(是的,甚至是函数体中的变量),这可能会导致一些难以追踪的错误。

与@Felix pointed out 一样,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;

调用

ensureChecked(frm.creatorusers, "You must select a Creator User!");

【讨论】:

我收到此错误:frm.creatorusers 未定义 [中断此错误] var rdo = (frm.creatorusers.length >...rm.creatorusers : frm.creatorusers; in firebug @OMThe:这意味着 frm.creatorusers 未定义(呃)。显然,并不总是有一个具有此名称的表单域。只需事先检查它是否存在。 (这也意味着您并没有真正使用我的代码,而是其他东西。我不明白您当时为什么接受我的回答,以及为什么您在代码停止工作时不接受它。) 一定要通过表格!!! onsubmit="return validate(this)" - 这也将使命名表单变得不必要。但是,如果您使用 document.getElementById("ID_OF_FORM") 确保表单具有 ID 而不仅仅是名称。 IE 将允许 getElementById("NAME_OF_FORM") 但其他浏览器不允许【参考方案5】:

啊,现在我明白了。如果您只有一个单选按钮,则 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 结束循环。 也许只是因为复制和粘贴的原因,但是有很多具有相同值的单选按钮并没有多大意义。

【讨论】:

kling 回答你的最后一点,它只是一个示例,因此它只是一个复制粘贴,其次你的代码不起作用,它总是给出消息“你必须选择一个创建者用户!”跨度> @OMThe Eternity:代码对我有用:jsfiddle.net/fkling/TbNux 可能还有其他问题。

以上是关于验证单个单选按钮在可用的 javascript 验证脚本中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

javascript中的单选按钮验证

使用 Javascript 验证单选按钮

Javascript单选按钮组验证

通过 JavaScript 验证单选按钮

验证后如何使用 JavaScript 和 HTML5 将图像放在单选按钮上

验证是不是选择了所有单选按钮或不在按钮上单击