我有以下JavaScript来切换ASP.NET页面中的下拉列表,当我单击按钮时会调用它。我喜欢4-5下拉列表/切换按钮对。每个切换按钮都会切换关联下拉列表中的启用/禁用属性。
function toggleDisableDropDown(dropDownID) {
var element = document.getElementById(dropDownID); // get the DOM element
if (element) { // element found
element.disabled = !element.disabled; // invert the boolean attribute
}
return false; // prevent default action
}
但是我的一个下拉列表需要每次都进行回发。我选择了一个项目来填充另一个下拉列表,我注意到在这个回发中我的所有其他下拉列表都被javascript禁用(用户点击这些下拉列表的切换按钮)被启用。
这里发生了什么?我该如何解决?
答案 0 :(得分:1)
Javascript DOM操作与控件在服务器上保存的状态无关。在服务器上的控件状态将不知道客户端上的下拉列表中的已启用属性。
使用控件的上次已知状态重新创建下拉列表。如果您想使用客户端上的最后一个状态重新呈现它们,您还需要发布一些客户端跟踪信息。您可以在隐藏字段中跟踪每个下拉列表的客户端状态,并使用这些隐藏字段中的已发布值来更新服务器上下拉列表的Enabled属性。
//Html
<input type="hidden" name="_trackingDropdown1" value="true" />
//Client Javascript
function toggleDisableDropDown(dropDownID) {
var element = document.getElementById(dropDownID); // get the DOM element
var trackingField = document.getElementById("_tracking" + dropDownID);
if (element) { // element found
element.disabled = !element.disabled; // invert the boolean attribute
trackingField.value = element.disabled;
}
return false; // prevent default action
}
//On Server during postback handling
if (Request.Params["_trackingDropDown1"] != null)
{
bool.TryParse(Request.Params["_trackingDropDown1"], out DropDownList1.Enabled);
}