我有一个注入javascript pageLoad
函数的ASP.Net控件。我还有一个直接在页面上的pageLoad
函数。我似乎不能让他们两个都开火。在javascript中,您是否仅限于使用相同名称的单个函数?
发布于 2009-06-12 19:20:21
是的..。与大多数语言一样,JavaScript要求符号在其作用域内是唯一的。在JavaScript中,如果你在一个给定的作用域内为一个函数创建了多个定义,那么最后一个被定义的函数就会“胜出”--就好像之前的定义从未存在过一样。
为了使冗余的pageLoad
函数正常工作,您需要做的是使用Sys.Application.add_load()
方法。使用它,您可以将任意数量的处理程序附加到页面加载事件。此外,您还可以使用匿名函数来添加add_load
方法。这样做可以保证处理程序不会有重复名称的危险。示例:
StringBuilder sb = new StringBuilder();
sb.Append("Sys.Application.add_load(");
sb.Append("function() { alert('page load'); });");
ClientScript.RegisterStartupScript(this.GetType(), "Page_Load", sb.ToString(), true);
您可以在客户端轻松地使用Sys.Application.add_load
,甚至可以多次添加相同的处理程序。这将导致多次触发同一函数:)
发布于 2009-06-12 18:33:24
我不同意Shog9的观点。
我知道在单个文档中可以有多个$( document ).ready(f(n))调用,每个调用都在DOM完成加载时依次调用。我也不认为多次调用ClientScript.RegisterStartupScript()会导致任何问题。
https://stackoverflow.com/questions/988166
复制相似问题