客户端javaScript切换下拉列表效果在第二次回发时反转

时间:2009-12-31 21:03:46

标签: javascript asp.net postback

我有一些JavaScript来切换ASP.NET页面中的下拉列表,当我单击按钮时会调用它。我喜欢4-5下拉列表/切换按钮对。每个切换按钮都会切换关联下拉列表中的启用/禁用属性。

我保存隐藏字段的禁用属性值,以跟踪回发之间按钮的禁用状态,使用以下javascript

function disableButton(dropdownID)
{
    var element = document.getElementById(dropdownID); // get the DOM element
    var trackingField = document.getElementById("_tracking" + dropdownID);
    if (element) { 
        trackingField.value = element.disabled; 
//sending the element.disabled instead of "!element.disabled" since we are
//setting dropdownlist.enabled property so is already negated for us
        element.disabled = !element.disabled; // invert the boolean attribute
    }
    return false; // prevent default action
}

HTML

    <input type="hidden" name="_trackingdropdownlist" id="_trackingdropdownlist" value="true" />

代码

 if (Request.Params[_trackingdropdownlist] != null)
            {
              bool val = true;
              bool.TryParse(Request.Params[_trackingdropdownlist], out val);
              dropdownlist.Enabled = val;

            }

所以下拉列表的状态在第一次回发往返时保持不变,但之后所有的下拉列表都被启用。这里出了什么问题?

*注意:这些下拉列表中的默认启用属性值为false。

2 个答案:

答案 0 :(得分:0)

您的隐藏元素不是服务器元素,并且它们的值在回发中丢失。当页面重新加载时,隐藏的元素将使用您指定的值“true”重新创建。当您在第二个回发时检查请求值时,在第一个和第二个回发之间未被修改的所有隐藏元素将包含true。

使它们成为服务器元素,以便您在视图状态中维护所做的任何更改。

答案 1 :(得分:0)

此外,为了帮助跟踪每个回发上发送到服务器的内容,您可以使用FiddlerTool之类的工具来跟踪http请求。您将能够查看请求之间是否丢失了viewstate和hidden表单字段状态。

另外,查看函数“disableButton”的代码,看起来它似乎切换按钮,而不是禁用它本身(给定element.disabled =!element.disabled)。如果你真的想要禁用按钮,你应该包括避免像“A =!A”这样的逻辑,它只会在每次执行语句时在状态之间切换。

因此,如果连线不正确,那么lincolnk的回答将指向正确的方向,否则,我建议您查看您的功能是如何编写的,这样只会在每次其他回发时禁用该按钮。