【发布时间】:2019-09-24 00:02:00
【问题描述】:
我通过在那里注入 JavaScript 函数来更新 div。我正在使用更新面板。 问题是这个 JS 函数的主体发生了变化。每次用户单击按钮时,都会将新的 JS 函数(函数名称始终相同)放入同一个 div 但具有不同的主体。函数体的这种变化内容的原因是新数据。
对我来说,结果是当我调用这个函数时,我总是执行那个 div 中的第一个函数。 div 的内容发生了变化 - 我已经检查过了。
我试过了:
- Sys.Application.add_load(GetMyChart)
- pageRequestManager.add_endRequest(EndRequestHandler)
- ScriptManager.RegisterStartupScript
- Page.ClientScript.RegisterStartupScript
- Page.ClientScript.RegisterClientScriptBlock
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<div id="chart1" runat="server" >
<script type="text/javascript">
function GetMyChart() { alert("wow!"); }
</script>
</div>
<asp:Label ID="Label1" runat="server" Text="old text"></asp:Label>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
<script type="text/javascript">
var pageRequestManager = Sys.WebForms.PageRequestManager.getInstance();
pageRequestManager.add_endRequest(EndRequestHandler);
function EndRequestHandler(sender, args) {
GetMyChart();
}
</script>
protected void Button1_Click(object sender, EventArgs e)
{
chart1.InnerHtml = GetChartFunction();
}
在此处显示的代码中,我总是很警觉。 我的目标是调用 GetChartFunction() 返回的 GetMyChart 函数,我需要在更新后立即调用它。
【问题讨论】:
-
GetChartFunction()创建了什么?它是定义新的GetMyChart函数的脚本块吗?如果 JavaScript 已经使用该名称定义了一个函数,则不清楚定义一个具有相同名称的新函数是否会替换旧函数。您能否生成一个不同的名称并让发出的脚本块调用该函数而不是使用add_endRequest? -
$(document).ready(function () { PageRequestManager.getInstance().add_endRequest(MYFUNCTION); });应该在每次更新面板更新时运行? -
@Jacob,GetChartFunction() 返回
<script type="text/javascript"> function GetMyChart() { //changing_body } </script> -
@Jacob,即使我给了不同的名字,那么如何调用这个函数呢?这个:
<script type="text/javascript"> function XYZ() { //changing_body } XYZ();</script>不起作用。如果我在add_endRequest中调用XYZ();,那么我会出错。XYZ is not defined -
@EGC,我不想使用 jQuery 或任何其他外部库。
标签: javascript c# webforms updatepanel