JQuery - 高级复选框处理

Posted

技术标签:

【中文标题】JQuery - 高级复选框处理【英文标题】:JQuery - Advanced Check box Handling 【发布时间】:2011-05-27 07:36:02 【问题描述】:

我有四个复选框字段集。每个字段集是一个时间段(12-1、1-2、2-3、3-4),在每个字段集中,我都有研讨会(研讨会 1、研讨会 2、研讨会 3 ......等)

每个字段集或时间段可以选择仅参加一个研讨会。 不能跨多个时间段选择同一个研讨会。 一些时间段有独特的研讨会,不会出现在任何其他时间段中 所有时间段都可以选择在该时间段内不参加研讨会。

所以.... 我正在使用以下代码禁用四个字段集中的重复复选框:

$(窗口).load(函数() $('input[type=checkbox]').change(function() name = $(this).attr('name'); id = $(this).attr('id'); 已检查 = $(this).attr('checked'); $('input[type=checkbox][name='+name+']:not(#'+id+')') .attr('禁用',选中) .每个(函数() 盖子 = $(this).attr('id'); 如果(选中) $('label[for='+lid+']').addClass('disabled'); 别的 $('label[for='+lid+']').removeClass('disabled'); ); ); );

这是完美的工作,但是,我还需要防止用户只检查每个字段集的一个复选框......或者当他们尝试检查字段集中的多个复选框时提醒他们。有没有办法编辑上面的脚本来完成这个?

谢谢!

【问题讨论】:

如果您有一个只能选择一个元素的多选器,为什么不在字段集中使用单选按钮而不是复选框? 【参考方案1】:

您应该获取选中复选框的数量并从那里进行验证

$('input[type=checkbox]').click(function()

    // get the checked elements in this fieldset    
    var numChkd = $(this).siblings(':checked').size();

    // do whatever kind of validation you need
    if(!numChkd && !this.checked)
        alert('Please select at least one');
        // keep it checked?
        $(this).attr('checked',true);
    ;

);

Demo here


Another Demo -- 当您尝试取消选择超过 2 个时显示。不过,实际上只需更改验证以满足您的需要;

$('input[type=checkbox]').click(function()

    var numChkd = $(this).siblings(':checked').size();

    if(numChkd <= 1 && !this.checked)
        alert('Please select at least two');
        $(this).attr('checked',true);
    ;

);

Another demo 回复评论。只需更改 if() 语句即可。

if(numChkd >= 1)
    alert('Please select only one per fieldset');
    $(this).attr('checked',false);
;

Another Demo - 我相信 html 存在一些问题。即附加到每个输入的onclick。它无法在您的 html 上运行的原因是因为它依赖于遍历(例如查找父字段集)。

$('input[type=checkbox]').click(function()

    // get the fieldset class
    var fieldset = $(this).parents('fieldset').attr('class');

    // set the number of checked
    var numChecked = $('.'+fieldset+' input:checked').size();

    // if more than 1
    if(numChecked > 1)
        alert('Please select only 1')
    

);  

【讨论】:

谢谢...我想我误解了我的要求。我希望防止用户在每个字段集中选择多个复选框。默认情况下,所有复选框都被取消选中。 没问题,看最后一个demo。 它不起作用...我认为这可能与跨字段集重复的复选框名称发生冲突。我已经把我的页面代码放在这里了:jsfiddle.net/jweisberg/a8kaY 成功了!谢谢约瑟夫!我们还可以防止第二个复选框在显示警报后保留它的选中值吗? 类似:checkbox.checked = false; ?

以上是关于JQuery - 高级复选框处理的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jQuery 处理复选框的更改?

通过Jquery来处理复选框

jQuery复选框的批量处理:全选非全选

jQuery click 事件处理程序为复选框调用了两次

使用 jQuery/AJAX 从 JSON 数据中过滤带有复选框的结果

jquery easyui 怎么使用循环为复选框赋值