我有这个javascript模式,我想用它来报错。只有代码在页面加载之前执行才能正常工作。所以结果是我在head标签之前有我的javascript,这意味着什么都没有被执行!
任何帮助?
public void showError(string error)
{
string script = "<script type=\"text/javascript\">$.facebox.settings.opacity = 0.4;jQuery.facebox(\""+error+"\");</script>";
System.Web.HttpContext.Current.Response.Write(script);
}
顺便说一下,我的ShowError方法在一个名为ErrorDisplay的类中 这就是我所说的:
string strErr = "error here";
ErrorDisplay myError = new ErrorDisplay();
myError.ShowError(strErr);
答案 0 :(得分:3)
基本问题是你需要让你的Javascript在执行之前等待DOM准备就绪。
最简单的方法是使用ClientScriptManager.RegisterStartupScript方法执行代码,而不是直接将其添加到页面中:
public void Page_Load(Object sender, EventArgs e)
{
Type myType = this.GetType();
string script = "<script>alert('Hello World! I am ready.');</script>";
Page.ClientScript.RegisterStartupScript(myType, "StartupScript", script);
}
<强>更新强>
我的例子是基于你的原始问题是关于Page_Load的事实。只需稍微修改代码以适合您的示例:
public void ShowError(string error)
{
StringBuilder sb = new StringBuilder();
s.Append("<script type='text/javascript'>");
s.Append("$.facebox.settings.opacity = 0.4;");
s.AppendFormat("$.facebox('{0}');", error);
s.Append("</script>");
Type t = this.GetType();
Page.ClientScript.RegisterStartupScript(t, "ErrorScript", sb.ToString());
}
答案 1 :(得分:2)
假设您希望稍后调用Page_Load中的代码,请尝试使用 Page_PreRender 方法。 您可以在此处找到事件列表及其调用顺序http://msdn.microsoft.com/en-us/library/aa479007.aspx
答案 2 :(得分:1)
这就是我实现它的方式:
public void ShowError(Page CurrentPage,string error)
{
StringBuilder sb = new StringBuilder();
sb.Append("<script type='text/javascript'>");
sb.Append("$.facebox.settings.opacity = 0.4;");
sb.AppendFormat("jQuery.facebox('{0}');", error);
sb.Append("</script>");
Type t = this.GetType();
CurrentPage.ClientScript.RegisterStartupScript(t, "ErrorScript", sb.ToString());
}
当我调用它时(这是“错误字符串”);
非常感谢你们!