【问题标题】:Javascript check if radio button was checked?Javascript检查是否选中了单选按钮?
【发布时间】:2012-03-07 11:52:53
【问题描述】:

我找到了执行此操作的脚本,但它们仅适用于一个单选按钮名称,我有 5 个不同的单选按钮集。我如何检查它是否现在选择了我尝试提交表单

if(document.getElementById('radiogroup1').value=="") {
        alert("Please select option one");
        document.getElementById('radiogroup1').focus();
        return false;
    }

不工作。

【问题讨论】:

标签: javascript radio


【解决方案1】:

如果您一心想要使用标准 JavaScript,那么:

函数定义

var isSelected = function() {
    var radioObj = document.formName.radioGroupName;

    for(var i=0; i<radioObj.length; i++) {
        if( radioObj[i].checked ) {
            return true;
        }
    }

    return false;
};

用法

if( !isSelected() ) {
    alert('Please select an option from group 1 .');
}   

我建议使用jQuery。它有很多选择器选项,当它们一起使用时,可以将大部分代码简化为一行。

替代解决方案

if( $('input[type=radio][name=radioGroupName]:selected').length == 0 ) {
    alert('Please select an option from group 1 .');
}

【讨论】:

【解决方案2】:
var checked = false, radios = document.getElementsById('radiogroup1');
for (var i = 0, radio; radio = radios[i]; i++) {
    if (radio.checked) {
        checked = true;
        break;
    }
}

if (!checked) {
    alert("Please select option one");
    radios.focus();
    return false;
}

return true;

【讨论】:

  • 按照规范,页面上的两个元素不应具有相同的 id。
  • document.getElementsById() 是错误的。 [sElement 之后]。它应该是 document.getElementById()document.getElementsByClassName[]()
【解决方案3】:

一个很简单的函数是:

<script type="text/javascript">

function checkRadios(form) {
   var btns = form.r0;
   for (var i=0; el=btns[i]; i++) {
     if (el.checked) return true;
   }
   alert('Please select a radio button');
   return false;
}
</script>

<form id="f0" onsubmit="return checkRadios(this);">
  one<input type="radio" name="r0"><br>
  two<input type="radio" name="r0"><br>
  three<input type="radio" name="r0"><br>
  <input type="submit">
</form>

但是,您应该总是默认选择一个单选按钮(即使用 select 属性),一些用户代理可能会自动选择第一个按钮。然后你只需要检查默认(通常是第一个)是否被选中。

【讨论】:

    【解决方案4】:

    为什么不只使用oneliner?

    我编写了这段代码,如果选中了至少一个收音机,它将提交表单

    (function(el){for(var i=el.length;i--;) if (el[i].checked) return el[i].form.submit()||1})(document.form_name.radio_name)||alert('please select item')
    

    否则会发出警报。或者您也可以修改它以与表单的onsubmit 一起使用:

    return (function(el){for(var i=el.length;i--;) if (el[i].checked) return 1})(document.form_name.radio_name)||alert('please select item')
    

    只需相应地替换 form_nameradio_name

    看看它是如何工作的:http://jsfiddle.net/QXeDv/5/

    【讨论】:

    • 我知道这是一个旧的,但是将所有代码写在一行上并不会使您的代码成为“单行”;避免这种做法。
    • 其实你错了。它们是可以内联工作的oneliners。请参阅小提琴以了解它们的工作原理。如果您无法理解它的作用......那么最好不要发表评论。
    【解决方案5】:

    这是一个很好的教程 -> http://www.somacon.com/p143.php


    // return the value of the radio button that is checked
    // return an empty string if none are checked, or
    // there are no radio buttons
    function getCheckedValue(radioObj) {
        if(!radioObj) return "";
        var radioLength = radioObj.length;
        if(radioLength == undefined)
            if(radioObj.checked) return radioObj.value;
            else return "";
        for(var i = 0; i < radioLength; i++) {
            if(radioObj[i].checked) return radioObj[i].value;
        }
        return "";
    }
    
    // set the radio button with the given value as being checked
    // do nothing if there are no radio buttons
    // if the given value does not exist, all the radio buttons
    // are reset to unchecked
    function setCheckedValue(radioObj, newValue) {
        if(!radioObj) return;
        var radioLength = radioObj.length;
        if(radioLength == undefined) {
            radioObj.checked = (radioObj.value == newValue.toString());
            return;
        }
        for(var i = 0; i < radioLength; i++) {
            radioObj[i].checked = false;
            if(radioObj[i].value == newValue.toString()) radioObj[i].checked = true;
        }
    }
    

    【讨论】:

      【解决方案6】:

      你对 jquery 还好吗?如果是这样:

      $(document).ready(function(){
          if($('input[type=radio]:checked').length == 0)
          {
              alert("Please select option one");         
              document.getElementById('radiogroup1').focus();         
              return false;     
          }
      }
      

      【讨论】:

      • $(document).ready(function(){ 使用 $(function(){ 在 jQuery 中变得更容易。它们都是相同的东西,除了后者是更新的,并且通过更多的跨浏览器过滤以进行 doc reday 检查,并且更适合 jquey 的风格
      • 另外,if 语句在 jQuery 中使用简单的 jquery 样式调用 if ($('input.classnameIsEasier').is(':checked')) { /* do work */ }; 变得更加简单
      • 还有一件事,如果您要使用 jquery 并且需要对无线电和检查等进行表单验证,请使用 this plugin 非常适合 ajaxing 您的表单以获得更多功能和更好的验证时间
      猜你喜欢
      • 2016-09-26
      • 1970-01-01
      • 2014-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-28
      • 2022-01-15
      相关资源
      最近更新 更多