回发时更新Javascript函数内容

Update Javascript function content on postback

本文关键字:函数 Javascript 更新      更新时间:2023-09-26

这是我的代码

<script type="text/javascript">
    function getNextScroll(i){
        <asp:Literal ID="infiniteScrollTableJS" runat="server"></asp:Literal>
    }
</script>

我正在用CodeBehind中的一些Javascript填充Literal。这在加载时效果很好。然而,当我回发邮件时,我遇到了一个问题。回发时更新Literal。函数中的实际脚本实际上发生了更改(我可以在Firebug中看到它)。但是,函数并没有意识到其中有新的脚本,它只是继续运行旧的东西。

据我所知,我想在回发后"重新初始化"函数内部的代码。

我知道如何使用add_endRequest在回发后调用函数。

这个问题不是.NET或其他任何东西独有的。事实上,我在这里有一个简单的例子->http://jsfiddle.net/7JxY7/1/即使脚本内容发生更改,"Run Function"也将始终提醒"one"。

我觉得jQuery可能有一些我可以使用的东西,但四处搜索却一无所获。

编辑:

我尝试了mblase75的建议。这在Javascript中非常有效(更重要的是,现在我明白了为什么),然而,考虑到这种方法,我仍然无法让它与回发一起工作。这是我更新的代码。

<script type="text/javascript">
    function getNextScroll(i){
        //some stuff
    }
    var prm = Sys.WebForms.PageRequestManager.getInstance();
    prm.add_endRequest(function (s, e) {
        //mblase75 suggestion
        getNextScroll = function (i){<asp:Literal ID="infiniteScrollTableJS" runat="server"></asp:Literal>};
    });
</script>

我原以为这会奏效,但当然,它和我原来的方法有同样的问题。Literal实际上已经更改,但函数不知道更改,它仍然有原始代码

在JavaScript中,函数实际上是一个对象。因此,与其尝试用字符串重写<script>元素,不如将函数(变量)名称替换为新的函数对象:

<script>
goTest = function(){
    alert('one');                        
}
function changeTest1(){
    goTest = function(){alert('two');};
    alert('ok');
}    
</script>
<a onclick="goTest();">Run Function</a><br/>
<a onclick="changeTest1();">Change Function</a>
​

http://jsfiddle.net/7JxY7/2/