如果页面上有未保存的数据,我在页面上有多个下拉框,我想限制用户更改下拉值。
我知道当hfSaveFlaghfSaveFlag
值为true
时,页面上有未保存的数据。
我的下拉列表:
<asp:DropDownList ID="ddlRFP" Width="250" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlRFP_SelectedIndexChanged" />
<asp:DropDownList ID="ddlSession" Width="250" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlSession_SelectedIndexChanged" />
<asp:DropDownList ID="ddlSessionType" Width="250" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlSessionType_SelectedIndexChanged" />
<asp:DropDownList ID="ddlCategory" Width="250" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlCategory_SelectedIndexChanged" />
我隐藏的元素:
<asp:HiddenField ID="hfPrevValue" runat="server" Value="" ClientIDMode="Static" />
<asp:HiddenField ID="hfSaveFlag" runat="server" Value="false" ClientIDMode="Static" />
我使用
后面的代码设置了onchange
和onfocus
个事件
ddlRFP.Attributes.Add("onchange", "if(!verifyPendingSave(this)) return false;");
ddlSession.Attributes.Add("onchange", "if(!verifyPendingSave(this)) return false;");
ddlSessionType.Attributes.Add("onchange", "if(!verifyPendingSave(this)) return false;");
ddlCategory.Attributes.Add("onchange", "if(!verifyPendingSave(this)) return false;");
ddlRFP.Attributes.Add("onfocus", "setPreviousValue(this);");
ddlSession.Attributes.Add("onfocus", "setPreviousValue(this);");
ddlSessionType.Attributes.Add("onfocus", "setPreviousValue(this);");
ddlCategory.Attributes.Add("onfocus", "setPreviousValue(this);");
Javascript函数
function verifyPendingSave(ctrl) {
if ($("#hfSaveFlag").val() == 'true') {
alert('You have pending changes on the page.');
//var control = document.getElementById(ctrl);
alert($("#hfPrevValue").val());
alert(ctrl.value);
ctrl.value = $("#hfPrevValue").val();
return false;
}
else {
return true;
}
}
function setPreviousValue(ctrl) {
$("#hfPrevValue").val(ctrl.value);
}
我尝试使用onfocus
捕获以前的选择,并在change
事件触发并且页面上有未保存的数据时使用它重新分配。
当我点击下拉列表时,它正在执行setPreviousValue
并在hfPrevValue
中存储正确的选定值。
现在,当我从下拉列表中选择不同的项目时,它似乎在更改事件之前再次执行onfocus
,从而导致存储的先前值丢失。我无法重置当前选择之前选择的值。我不确定我在这里缺少什么。