【问题标题】:Checkbox disable enable复选框禁用启用
【发布时间】:2012-08-07 21:19:37
【问题描述】:

我目前有一个 jQuery 函数,如果父复选框未选中,则禁用复选框列表,并在选中时启用。但是,父复选框默认为取消选中,这是我想要的。

这会导致代码出现问题,因为它在页面加载时启用,并且只有在您选中和取消选中父复选框时才会禁用。

有人知道解决办法吗?

$(document).ready(function() {
    $('#cbsys').bind('click', function() {
        var doEnable = ($('#cbsys:checked').length > 0);
        $('#syscbl').each(function() {
            if (doEnable) {
                $(this).attr('disabled', null);
                $(this).parents('label').removeClass('cssDisabled');
            } else {
                $(this).attr('disabled', 'disabled');
                $(this).parents('label').addClass('cssDisabled');
            }
        });
    });
});

【问题讨论】:

  • $('#syscbl').each?一个元素?
  • 我认为这些是“复选框列表”中的其他复选框...?

标签: jquery checkbox


【解决方案1】:

只需将其缓存为一个函数,然后在文档就绪以及单击时运行它。我还稍微优化了你的代码:

function disableCk() {
  var doEnable = $('#cbsys:checked').length; // <-- use a class
  $('#syscbl').each(function() { // <-- use a class
    var $this = $(this);
    if (doEnable) {
      $this.prop('disabled', false)
        .parents('label')
        .removeClass('cssDisabled');
    }
    else {
      $this.prop('disabled', true)
        .parents('label')
        .addClass('cssDisabled');
    }
  });
}

$(document).ready(function() {
  disableCk();
  $('#cbsys').on('click', disableCk);
});

编辑

刚刚注意到您似乎使用了多个具有相同名称的 ID,这是无效的 HTML,请确保改用类。我在代码中加了注释,看上面。

【讨论】:

  • 目前是cbl的ID。我应该创建一个类并将其放在 cbl 控件和 jquery 中吗?我有点新,所以我可能会遗漏一些东西。好像有点没必要。
  • 事情是 id 必须是唯一的,所以这个 $('#syscbl').each 对我来说没有任何意义。
  • 是的,这就是我被教导的方式。这可能是过度补偿。但我的目标只有一个。
【解决方案2】:

绑定后立即触发您的点击处理程序:

$('#cbsys').bind('click', function() {
    var doEnable = ($('#cbsys:checked').length > 0);
    $('#syscbl').each(function() {
    if (doEnable) {
        $(this).attr('disabled', null);
        $(this).parents('label').removeClass('cssDisabled');
    }
    else {
        $(this).attr('disabled', 'disabled');
        $(this).parents('label').addClass('cssDisabled');
    }
}).trigger('click').trigger('click');

【讨论】:

  • aaand -1。这将只是 check 父复选框。 “父复选框默认为取消选中,这是我想要的。”
  • 哈哈,我将删除我对编辑的反对票,但它仍然有点混乱。
  • 好点@ahren - 我想对现有代码进行最小更改的方法就是触发两次点击(根据我更新的答案)......原始代码有点不过很奇怪,我的意思是$('#syscbl').each(... 没有意义,doEnable = this.checked 会更好...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-17
  • 2014-01-24
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
  • 2012-06-10
  • 2012-02-08
相关资源
最近更新 更多