一个有趣的客户端注册事件
在写一段再平常不过的代码时,突然发现一个很有趣的问题,客户端的window.location.href无法执行?
代码很简单。我们在页面中放置一个BUTTON控件,然后在服务端的Page_Load事件中加入客户端注册代码:
if (!Page.IsPostBack)
{
this.Button1.Attributes["onclick"] = "javascript:return ConfirmSelect();";
}
在客户端中的javascirpt中:{
this.Button1.Attributes["onclick"] = "javascript:return ConfirmSelect();";
}
function ComfirmSelect()
{
window.location.href = "abc.aspx";
//return false;
}
{
window.location.href = "abc.aspx";
//return false;
}
按照假定的逻辑,应当是从客户端直接执行window.location,而不需要再返回服务端。可实际上呢?这个客户端事件根本没有执行,服务端的Button1_Click事件依旧被执行。
我们再把客户端Javascript改写一下,看看会发生什么情况:
function ComfirmSelect()
{
alert("第一次执行!");
window.location.href="abc.aspx";
alert("第二次执行!");
//return false;
}
我们会注意到,在执行第一个alert()时,状态栏中的进度条是未被加载的,紧接着,会在进度条加载的状态下显示第二个alert()。这时我们可以注意到,window.location已经被服务端的事件覆盖了。也就是说在服务端注册的客户端事件对于window.location是无效的。{
alert("第一次执行!");
window.location.href="abc.aspx";
alert("第二次执行!");
//return false;
}
现在我们把return false这行的注释去掉,看看处理方式。在这种情况下,只有第一次alert是按照逻辑来处理的,然后页面会向服务端传递一次,再次执行第二个alert(),最后才转到我想要的页面。(顺序反了?)
还不清楚为什么会这样,希望能得到解答。
posted on 2006-11-19 08:53 George Ge 阅读(2233) 评论(8) 编辑 收藏 举报