如何在回发时保留禁用的复选框?

时间:2015-09-25 10:14:27

标签: javascript c# jquery asp.net checkbox

我有这组javascript代码,允许我根据我的选择禁用/启用复选框。

下面的第一组代码允许我将默认值设置为"选择全部"当"选择全部"并禁用其余部分在第一页加载期间检查但不在回发时检查。在回发中不这样做的原因是因为例如如果用户没有选中复选框列表2中的任何复选框,我想提示用户选中复选框列表2中的至少一个复选框,但不想先覆盖用户选择在回发时使用默认"全选"在checkboxlist1和checkboxlist2中。

$(function () {
    if($("#hidden").val() == "")
    {
        $("#Checkboxlist1 :checkbox").attr('disabled', 'disabled');
        $("#Checkboxlist1 :checkbox[value='Select All']").removeAttr('disabled');
        $("#Checkboxlist1 :checkbox[value='Select All']").prop("checked", true);
        $("#Checkboxlist2 :checkbox").attr('disabled', 'disabled');
        $("#Checkboxlist2 :checkbox[value='Select All']").removeAttr('disabled');
        $("#Checkboxlist2 :checkbox[value='Select All']").prop("checked", true);
        $("#hidden").val("set");
    }
});

$(function () {
    $("#Checkboxlist2 :checkbox").change(function () {
            var ischecked = $(this).is(":checked");
            var val = $(this).val();
            //alert(val);
            if (val == "Select All") {
                if (ischecked) {
                    $("#Checkboxlist2 :checkbox").attr('disabled', 'disabled');
                    $(this).removeAttr('disabled');
                    $("#Checkboxlist2  :checkbox").prop("checked", false);
                    $(this).prop("checked", true);

                    return;
                } else {
                    $("#Checkboxlist2  :checkbox").removeAttr('disabled');
                    return;

我的问题是:

在回发时,我的检查值会保留但以前禁用的复选框已启用,那么如何在回发时保留其整个状态?

我确实启用了我的复选框列表enableviewstate = true

2 个答案:

答案 0 :(得分:0)

我不确定您将$("#hidden")此值设置为空。 但是,如果您的checkbox更改事件旨在正确设置所有checkbox disabled状态,请在该事件处理程序之后立即调用trigger事件上的change方法。 这样的事情。

$("#Checkboxlist2 :checkbox").trigger('change');
像这样

$("#Checkboxlist2 :checkbox").change(function () {
var ischecked = $(this).is(":checked");
var val = $(this).val();
//alert(val);
  if (val == "Select All") {
    if (ischecked) {
        $("#Checkboxlist2 :checkbox").attr('disabled', 'disabled');
        $(this).removeAttr('disabled');
        $("#Checkboxlist2  :checkbox").prop("checked", false);
        $(this).prop("checked", true);

        return;
    } else {
        $("#Checkboxlist2  :checkbox").removeAttr('disabled');
        return;
    }
  }
});
$("#Checkboxlist2 :checkbox").trigger('change');

答案 1 :(得分:0)

  

只是尝试在document.ready函数中放置一个标志..它可以工作