【问题标题】:Dynamical radio button group validation in jQueryjQuery中的动态单选按钮组验证
【发布时间】:2012-01-04 00:23:32
【问题描述】:

验证以确保每个组中至少有一个被检查的最佳验证方法是什么,因此在以下示例中,组是name1name2name3

示例

<input type="radio" name="name1">
<input type="radio" name="name1"> 
<input type="radio" name="name1"> 

<input type="radio" name="name2"> 
<input type="radio" name="name2"> 
<input type="radio" name="name2">

<input type="radio" name="name3"> 
<input type="radio" name="name3"> 
<input type="radio" name="name3">

我知道我可以在每个 div 周围包裹一个 div,然后检查 div 中的每个单选按钮,但我正在寻找更动态的解决方案。因此,如果将来添加更多单选按钮,则不需要更改 jQuery 代码或不需要添加 div - 我希望这是有道理的。

【问题讨论】:

  • 为什么不为每个组添加一个类或一个id属性?您可以使用它进行验证

标签: jquery radio


【解决方案1】:

您应该使用jquery.validate.js 库来帮助您解决这个问题,查看他们的demo

如果你使用这个库,它会很简单,

<input type="radio" name="name1" validate="required:true">
<input type="radio" name="name1">
<input type="radio" name="name1">

<input type="radio" name="name2" validate="required:true">
<input type="radio" name="name2">
<input type="radio" name="name2">

查看jFiddle:它会找到单选按钮的所有不同名称,然后遍历所有这些不同的组,并确保至少有一个已选中,否则将引发警报。

$('#button').click(function() {
    var names = [];

    $('input[type="radio"]').each(function() {
        // Creates an array with the names of all the different checkbox group.
        names[$(this).attr('name')] = true;
    });

    // Goes through all the names and make sure there's at least one checked.
    for (name in names) {
        var radio_buttons = $("input[name='" + name + "']");
        if (radio_buttons.filter(':checked').length == 0) {
            alert('none checked in ' + name);
        } 
        else {
            // If you need to use the result you can do so without
            // another (costly) jQuery selector call:
            var val = radio_buttons.val();
        }
    }
});

【讨论】:

  • 谢谢,这是一个非常有用的解决方案——我不想使用插件来验证单选按钮
  • names[$(this).attr('name')] = true;做什么?
  • @contactmatt 因为javascript数组是关联的,我相信设置names['abc'] = true本质上只是将abc添加到数组names
【解决方案2】:
$('[name="name1"]:checked').length != 0

或者

$('[name="name1"]').is(':checked')

如果你愿意,你也可以做一些更有活力的事情:

var i = 1;
while ($('[name="name'+i+'"]').length != 0) {
    if ($('[name="name'+i+'"]').is(':checked')) {
        // at least one is checked in this group
    } else {
        // none are checked
    }
    i++;
}

【讨论】:

  • 如果收音机的名称采用这种格式,这将是一个非常好的解决方案,但我认为作为开发人员,他希望给它们一个更重要的名称。
猜你喜欢
  • 2015-05-31
  • 2014-02-26
  • 2012-02-07
  • 1970-01-01
  • 2019-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多