【问题标题】:Form validating radio buttons by class name按类名表单验证单选按钮
【发布时间】:2014-10-23 23:18:37
【问题描述】:

我正在使用以下脚本:

 if($('.fmscr:checked').val()){
        $('.fmscr').closest('.form-group').removeClass('has-error');
        $('.fmscr').closest('.form-group').addClass('has-success');
    }else{
        $('.fmscr').closest('.form-group').addClass('has-error');
        $('.fmscr').closest('.form-group').removeClass('has-success');
    }

在以下电台的表格中:

    <div class='form-group'>
        <div class='col-xs-12'>
            <p>
            Were you subject to the (FMSCR's) Department of Transportation (DOT) Regulations while employed?<span class='req'> *</span>
            </p>
            <label class='radio-inline'>
                <input type='radio' class='fmscr checked' name='fmscr[]' value='1'> Yes
            </label>
            <label class='radio-inline'>
                <input type='radio' class='fmscr checked' name='fmscr[]' value='-1'> No
            </label>
        </div>
    </div>

单选按钮的数量不确定。上面的脚本在提交时运行,但它不计算单选按钮,直到两者都被选中,并且只有一个单选按钮被选中。那么我在这里做错了什么?无论数量如何,我都希望能够检查所有单选按钮,并让它们能够正确验证。如果需要任何进一步的信息,请告诉我!提前谢谢你。

【问题讨论】:

    标签: javascript jquery html forms


    【解决方案1】:

    如果您确实有多组radio 按钮共享同一个类选择器,以下代码应该会有所帮助:

    $('.fmscr:checked').each(function() {
       if( this.value ) {
            $(this).closest('.form-group').removeClass('has-error');
            $(this).closest('.form-group').addClass('has-success');
        } else {
            $(this).closest('.form-group').addClass('has-error');
            $(this).closest('.form-group').removeClass('has-success');
        }
    });
    

    【讨论】:

    • 您的代码不考虑每个值的前一个或下一个值。假设我将“是”作为第一个选项,将“否”作为第二个选项。两台收音机共享.checked 类。如果选择是,则成功,但随后转到下一个无线电,否,并且未选择。即使选择了一个选项,它也不会失败。
    • 当您的单选按钮共享相同的name 属性时,一次只能检查一个。你能创建一个 jsfiddle 来显示你在解释什么吗?
    • 不要将.checked:checked 混淆...... 它们不是一回事。在代码中你有:checked,而在你上面的评论中你指的是.checked。您能否通过更新问题来澄清这一点。
    【解决方案2】:

    你的代码

    if ($('.fmscr:checked').val())
    

    ...仅考虑与选择器匹配的第一个找到的元素。详情见这里:http://api.jquery.com/val/ 我不明白你想做什么,但你可以这样尝试:

    if ($('.fmscr:checked').length > 0 )) // at least one is checked
    

    祝你好运!

    【讨论】:

    • 它清楚地说明了我想要做什么。我认为将所有具有相似名称的单选按钮作为名称数组将允许检查任意数量的单选按钮,而不管计数如何?基本上,这些按钮是就业表格的一部分,他们可以选择添加或删除就业,当他们添加就业时,它会通过.clone() 复制表格
    • 那为什么不使用复选框呢?您不能选中同一组中的多个单选按钮。
    • 因为我只希望他们能够从每个问题中选择是或否,而不是两个答案
    • 好吧,正如我所说,您不能从同一组中选择多个单选按钮。唯一的解决办法是给它们每一个起不同的名字,比如 fmscr_1、fmscr_2 等等。
    猜你喜欢
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 2018-07-13
    • 1970-01-01
    • 2015-09-01
    • 2012-12-01
    相关资源
    最近更新 更多