如何在回发时保留JavaScript函数中的静态变量值?

时间:2010-01-27 12:55:12

标签: javascript postback static-variables

我有以下示例:

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server">

    <script type="text/javascript">
function test(){

if (test.initialized=='undefined'){
    test.initialized = 'true';
    }

alert(test.initialized);

};
    </script>

</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
    <asp:Button ID="btnPostBack" runat="server" Text="Post back" OnClientClick="test()" />
</asp:Content>

当我在页面上单击回发时,我发现初始化的变量 - 在函数本身上定义 - 正在失去其值并再次变为“未定义”。

是否可以在定义静态值后保留这些静态值并使其不受页面上任何回发的影响?

5 个答案:

答案 0 :(得分:2)

您可以将它们添加为查询字符串,也可以将它们保存在Cookie中。

答案 1 :(得分:1)

也许你想做这样的事情。我还认为你将测试功能与测试对象混淆。

var initialized = false;
function test(){
    if ( !initialized){
        initialized = true;
    }
};
            alert(initialized); // false
            test();
            alert(initialized); //true

答案 2 :(得分:1)

当页面重新加载时,javascript将在回发时重新执行(除非您使用的是更新面板)。

保留客户端值,使用JS将值写入asp隐藏字段,如果IsPostBack为true则不渲染javascript,以便在回发时不会覆盖

答案 3 :(得分:0)

我认为使用部分回发也是一种方式。

如果不可能,只有使用Java脚本,我认为只要不被用户拒绝,cookie就可以是另一种方式。

我的感觉是最好的方式是以我不需要存储它的方式设计页面:)

答案 4 :(得分:0)

您可以添加隐藏字段并设置此值吗?我认为这样它将保存在viewstate中,你可以将它的值加载到你的变量中,例如:

var p ='&lt;%= blah.Text%&gt;';