我有一个注入javascript pageLoad
函数的ASP.Net控件。我也直接在页面上有一个pageLoad
函数。我似乎无法让他们两个都开火。您是否仅限于javascript中具有相同名称的单个函数?
答案 0 :(得分:34)
是的...与大多数语言一样,JavaScript要求符号在其范围内是唯一的。在JavaScript中,如果为给定范围内的函数创建多个定义,则要定义的最后一个定义为“wins” - 就好像之前的定义从未存在过一样。
为了使冗余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
,甚至可以多次添加相同的处理程序。这将导致多次触发相同的功能:)
答案 1 :(得分:-2)
我不同意Shog9 ......
我知道在单个文档中有多个$(document).ready(f(n))调用是可能的,每个文件在DOM完成加载时依次被调用。我不相信对ClientScript.RegisterStartupScript()的多次调用也会导致任何问题。