使用jQuery启用/禁用复选框

时间:2012-06-12 19:09:58

标签: jquery

我希望有一个jquery函数,当单击任何复选框时将激活该函数,并且根据单击的复选框的值字段,它将禁用或启用其他复选框。

到目前为止,我有:

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

    });
});

好的,所以我取得了一些进展......但它仍然没有用。

<script type="text/javascript">
$(function () {
    $(':checkbox').click(function () {

        $value = $(this).attr('value');

        if ($(this).is(':checked'))
        {
            switch ($value)
            {
                case "BLIPA":
                    $(':checkbox[value*="B"]').attr('disabled', true);
            }
        }
        else
        {
            $(':checkbox').each(function()
            {

            }
        }
    });
});

我犯过什么错误吗?

编辑:

好的,我已经解决了。这是解决方案:

<script type="text/javascript">
$(function () {
    $("input[type='checkbox']").click(function () {

        var value = $(this).attr('value');

        if ($(this).is(':checked')) {

            var modules = FindModuleRules(value);

            $(':checkbox[value*="' + modules[0] + '"]').attr('disabled', true);
            $(':checkbox[value*="' + modules[1] + '"]').attr('disabled', true);
            $(':checkbox[value*="' + modules[2] + '"]').attr('disabled', true);
            $(':checkbox[value~="' + value + '"]').attr('disabled', false);

        }
        else {
            var modules = FindModuleRules(value);

            $(':checkbox[value*="' + modules[0] + '"]').attr('disabled', false);
            $(':checkbox[value*="' + modules[1] + '"]').attr('disabled', false);
            $(':checkbox[value*="' + modules[2] + '"]').attr('disabled', false);
        }
    });

    function FindModuleRules(string) {

        var modules = new Array();

        var bRegex = /B/;
        var lRegex = /L/;
        var aRegex = /A/;

        if (string.search(bRegex) != -1)
            modules[0] = "B";
        else
            modules[0] = "X";
        if (string.search(lRegex) != -1)
            modules[1] = "L";
        else
            modules[1] = "X";
        if (string.search(aRegex) != -1)
            modules[2] = "A";
        else
            modules[2] = "X";

        return modules;
    }

});

4 个答案:

答案 0 :(得分:1)

首先,input[type="checkbox"]之间不能有空格,因为它会在其他输入元素(无效)中查找复选框。

类似

$('input[type="checkbox"]').click(function () {
    $('otherselector').prop('disabled', this.checked);
});

答案 1 :(得分:1)

如果没有看到完全你如何设置标记,就很难告诉你需要做什么。但是,她是jsfiddle来说明:

HTML

<input type="checkbox" id="ckall" /> Check 'em all!
<ul>
    <li><input type="checkbox" /> Item 1</li>
    <li><input type="checkbox" /> Item 2</li>
    <li><input type="checkbox" /> Item 3</li>
    <li><input type="checkbox" /> Item 4</li>
    <li><input type="checkbox" /> Item 5</li>
</ul>​

JS

$("input[type='checkbox']").click(function() {
    $("ul :checkbox").attr("checked", $(this).is(":checked"));            
});​

根据您的标记以及您希望做的完全将决定您的jQuery选择器。但是,我假设您要创建一个“全部检查”类型的复选框。如果是这样,您将在小提琴中看到检查所有复选框事件,然后选择某个容器元素中的所有复选框。如果您不这样做,那么您最终可能会更改选中所有复选框的状态。

答案 2 :(得分:0)

$('input [type="checkbox"]').click(function () {
    if($(this).is(':checked')) {
        //do stuff
    }
})

答案 3 :(得分:0)

我已经回答了这个问题。感谢您的帮助。

<script type="text/javascript">
$(function () {
    $("input[type='checkbox']").click(function () {

        var value = $(this).attr('value');

        if ($(this).is(':checked')) {

            var modules = FindModuleRules(value);

            $(':checkbox[value*="' + modules[0] + '"]').attr('disabled', true);
            $(':checkbox[value*="' + modules[1] + '"]').attr('disabled', true);
            $(':checkbox[value*="' + modules[2] + '"]').attr('disabled', true);
            $(':checkbox[value~="' + value + '"]').attr('disabled', false);

        }
        else {
            var modules = FindModuleRules(value);

            $(':checkbox[value*="' + modules[0] + '"]').attr('disabled', false);
            $(':checkbox[value*="' + modules[1] + '"]').attr('disabled', false);
            $(':checkbox[value*="' + modules[2] + '"]').attr('disabled', false);
        }
    });

    function FindModuleRules(string) {

        var modules = new Array();

        var bRegex = /B/;
        var lRegex = /L/;
        var aRegex = /A/;

        if (string.search(bRegex) != -1)
            modules[0] = "B";
        else
            modules[0] = "X";
        if (string.search(lRegex) != -1)
            modules[1] = "L";
        else
            modules[1] = "X";
        if (string.search(aRegex) != -1)
            modules[2] = "A";
        else
            modules[2] = "X";

        return modules;
    }

});

我使用FindModuleRule函数对所有值字符串进行排序,并选出仅出现在某些值中的关键字符,如“A”,“L”或“B”(如果没有找到)然后我分配给'X '在任何值字符串中都找不到。然后,我使用该字符选择包含该字符的值的所有复选框,并依次打开或关闭它们,然后将单击的复选框切换到适当的状态。