这是我的代码
<script type="text/javascript">
function getNextScroll(i){
<asp:Literal ID="infiniteScrollTableJS" runat="server"></asp:Literal>
}
</script>
我使用CodeBehind中的一些Javascript来填充Literal。这非常适合OnLoad。但是,当我做回发时,我遇到了问题。 Literal在回发时更新。函数内部的实际脚本实际上已更改(我可以使用Firebug查看)。但是,该功能并不知道那里有新的脚本,它只是继续运行旧的东西。
我可以说,我想在回发后'重新初始化'函数内部的代码。
我知道如何使用add_endRequest在回发后调用函数。
此问题并非.NET或其他任何特有的问题。事实上,我在这里有一个简单的例子 - &gt; 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实际上已更改,但该函数不知道更改,它仍然具有原始代码
答案 0 :(得分: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>