0

我想要一个 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

4 回答 4

2

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

所以像

$('input[type="checkbox"]').click(function () {
    $('otherselector').prop('disabled', this.checked);
});
于 2012-06-12T19:19:30.070 回答
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 选择器但是,我假设您正在寻找创建“全选”类型的复选框。如果是这样,您将在小提琴中看到选中所有复选框事件然后选择某个容器元素中的所有复选框。如果你不这样做,那么你也可能会改变你的检查所有复选框的状态。

于 2012-06-12T19:31:14.243 回答
0
$('input [type="checkbox"]').click(function () {
    if($(this).is(':checked')) {
        //do stuff
    }
})
于 2012-06-12T19:11:59.963 回答
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”,即在任何值字符串中都找不到。然后,我使用该字符选择所有具有包含该字符的值的复选框,并根据情况打开或关闭它们,然后将单击的复选框切换到适当的状态。

于 2012-06-27T17:28:34.887 回答