最近碰到一个这样的状况,需要先执行控件服务器的事件然后再执行前端的js事件。因为客户端事件是先与服务器事件执行的,这就需要在需要执行js的地方由后台调用了。
我先使用的是:
this.btnOK.Attributes.Add("onclick", "javascript:btnOK_OnClick();");
出现了一个奇怪的现象,只有在第二次单击按钮后js事件才被执行。当我发现了下面的3段文章后,终于知道错在了哪里。
改成:ClientScript.RegisterStartupScript(ClientScript.GetType(), "onclick", "<script>btnOK_OnClick();</script>");之后,就不会出现那个怪现象了。
1. 用Response.Write方法
代码如下:
Response.Write("<script type='text/javascript'>alert("XXX");</script>");
此方法缺陷就是不能调用脚本文件中的自定义的函数,只能调用内部函数,具体调用自定义的函数只能在Response.Write写上函数定 义,比如
Response.Write("<script type='text/javascript'>function myfun(){}</script>");
2.用ClientScript类
代码如下:在想调用某个javascript脚本函数的地方添加代码,注意要保证MyFun已经在脚本文件中定义过了。
ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", "<script>MyFun();</script>");
这个方法比Response.Write更方便一些,可以直接调用脚本文件中的自定义函数。
3.普通的添加控件的Attributes属性
对于普通按钮就是:Button1.Attributes.Add("onclick","MyFun();");
只能在Onload中或类似于onload的初始化过程中添加才有效。而且是先执行脚本函数,无法改变执行顺序。
注意,以上所有方法中,后台代码都不能有转化当前页的代码,比如Redirect等,要把转页代码放在脚本里面。