jquery禁用状态不适当触发

时间:2014-08-26 17:39:51

标签: javascript jquery html asp.net-mvc

在这种情况下,我有两个下拉选择元素,它们对应于两个独立的div容器。当用户在第一个选择元素中选择一个选项时,该特定值在相应的div中被更改为disabled。为了更好地了解问题,我附上了特定部分的两张图片。

第一个图像显示了选择元素的初始状态。 "选择一个标准"元素对应于我的能量标准"我的能量标准" div,"选择期间"对应于我的学习期"我的学习期"格。

enter image description here

问题

当我从选择下拉列表中选择一个句点时(从1到40),问题就出现了。理想情况下,如果我选择1年,我的学习期间的第一个复选框" div应该被禁用。但是这样做会导致2003年被禁用。但是,如果我选择任何大于4的年份,它会像您期望的那样工作。

我已经包含了与每个部分对应的代码部分。

CODE

    //Select a Standard Code section
$("#baselineResidentialStandardYear").change(function () {
    standardValue = $("#baselineResidentialStandardYear").val();
    console.log(standardValue);
    //if (standardValue == $("#" + standardValue).attr('id') && $('#' + standardValue).hasClass("standard")) {
    //    $('#' + standardValue).attr('disabled', true);
    //    $("#standards").find('input[type=checkbox]').not('#' + standardValue).attr('disabled', false);
    //}
    if ($('#' + standardValue).hasClass("standard")) {
        if (standardValue == $('#' + standardValue).attr('id')) {
            $('#' + standardValue).attr('disabled', true);
            $('#standards').find('input[type=checkbox]').not('#' + standardValue).attr('disabled', false);
        }
    }
});

//Select Period code
$("#baselineResidentialStudyPeriod").change(function () {
    period = $("#baselineResidentialStudyPeriod").val();
    console.log(period);
    //if (period == $('#' + period).attr('id') && $('#' + period).hasClass("studyPeriod")) {
    //    console.log("test");
    //    $('#' + period).attr('disabled', true);
    //    $("#years").find('input[type=checkbox]').not('#' + period).attr('disabled', false);
    //}

    $('#years').find('input[class=checkbox]').each(function () {
        if ($(this).hasClass("studyPeriod")) {
            $('#' + period).attr('disabled', true);
            $('#years').find('input[type=checkbox]').not('#' + period).attr('disabled', false);
        }
    });
});

即使我使用的是.find方法,我也不太清楚为什么会发生这种错误的交互

IMP NOTE

"我的能源标准"中的复选框元素; div的值属性为1到4。 “我的学习期间”中的复选框元素" div的值属性为1到40。

我必须对此进行维护,因为此信息将用于从数据库中检索更多补充信息。

1 个答案:

答案 0 :(得分:0)

你需要做这个......

$('#' + standardValue).attr('disabled', true);

这......

$('#' + period).attr('disabled', true);

...成

$('#standards #' + standardValue).attr('disabled', true);

和...

$('#years #' + period).attr('disabled', true);

分别

您的另一个问题是,在使用重复ID时,某些浏览器可能会失败。您应该将这些ID更改为类。拥有多个id =“1”等是不好的做法。