我有以下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"]')