禁止用户使用Java取消选择asp:CheckBoxList的最后选中的复选框

时间:2018-11-07 12:23:35

标签: javascript asp.net vb.net postback checkboxlist

我有以下asp:CheckBoxList,它们从数据库中获取一些值。

<asp:CheckBoxList ID="chkExpType" runat="server" OnChange="javascript: SetFilterValuesToHiddenFields();" AutoPostBack="false" ClientIDMode="Static"></asp:CheckBoxList>

<asp:CheckBoxList ID="chkOrganism" runat="server" OnChange="javascript: SetFilterValuesToHiddenFields();" AutoPostBack="false" ClientIDMode="Static"></asp:CheckBoxList>

它们都调用相同的Javascript函数,在该函数中,我试图检查每个CheckBoxList的单击复选框是否为最后选择的复选框,以禁止用户取消选择它们。简而言之,我希望每个CheckBoxList中始终至少有一个选中的复选框。如果两个类别中至少有一个选中的复选框,我想发送回发。如果用户尝试取消选择这些类别之一中的最后一个,我想提醒他们,然后再次选择最后一个未选中的复选框。

<script>
var lastSelectionForOrganism;
var lastSelectionForExpType;

function SetFilterValuesToHiddenFields() {

    var chkBoxExpType = document.getElementById('<%= chkExpType.ClientID %>');
    var options = chkBoxExpType.getElementsByTagName('input');
    var expTypeValues = "";
    for (var i = 0; i < options.length; i++) {
        if (options[i].checked) {
            expTypeValues = expTypeValues + "," + options[i].value;
        }
    }
    expTypeValues = expTypeValues.substring(1);
    if (expTypeValues.length === 1) {
        lastSelectionForExpType = expTypeValues;
    }

    var chkBoxOrganism = document.getElementById('<%= chkOrganism.ClientID %>');
    var options = chkBoxOrganism.getElementsByTagName('input');
    var organismValues = "";
    for (var i = 0; i < options.length; i++) {
        if (options[i].checked) {
            organismValues = organismValues + "," + options[i].value;
        }
    }
    organismValues = organismValues.substring(1);
    if (organismValues.length === 1) {
        lastSelectionForOrganism = organismValues;
    }


    if (hidfieldSelectedExpType.value && hidfieldSelectedOrganisms.value) {
        var val = "FilterChange";
        setTimeout(function () { __doPostBack(document.forms[0].name, val); }, 1);
    }
    else {
        if (lastSelectionForOrganism) {
            alert("last organism: " + lastSelectionForOrganism);
        }
        if (lastSelectionForExpType) {
            alert("last exp type: " + lastSelectionForExpType);
        }
    }

    return false;
}
</script>

问题是,在我的代码中,单击后我能够获得所单击复选框的值,这意味着如果单击了最后一个复选框,我会得到一个undefined值,因为它在我之前就未被选中获得其价值。 希望我的解释不是很混乱。我会很感激任何反馈。

编辑:

以防万一它可能对其他人有用,我设法使用以下代码来实现上述逻辑:

<script>
var lastCheckedOrganism;

var $checksOrganism = $('input[id^="chkOrganism"]').click(function(e) {
var numCheckedOrganism = $checksOrganism.filter(':checked').length;
if (numCheckedOrganism < 1) {
    alert("At least one organism should be selected.");
    lastCheckedOrganism = this;
    lastCheckedOrganism.checked = true;
    return false;
} else {
    //do postback
}
});
<script>

第二个asp:CheckBoxList的代码完全相同,只需更改以下部分:

$('input[id^="chkExpType"]')

0 个答案:

没有答案