回發

2012-03-22 33 views
1

更新JavaScript函數的內容這裏是我的代碼回發

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

我是填充用直譯一些JavaScript的代碼隱藏。這工作很棒OnLoad。但是,當我做回發時,我有一個問題。 Literal更新回發。實際的函數內部腳本實際上被改變了(我可以用Firebug看到它)。但是,函數並不知道里面有新的腳本,它只是繼續運行舊的東西。

所以我可以告訴,我想在回發後重新初始化函數內部的代碼。

我知道如何在使用add_endRequest回發後調用函數。

這個問題並不是.NET獨有的或任何東西。事實上,我在這裏有一個簡單的例子 - >http://jsfiddle.net/7JxY7/1/即使腳本內容改變,'運行函數'也會一直提醒'一個'。

我覺得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實際上已經改變了,但函數並不知道這個改變,它仍然有原始代碼

回答

1

在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/