走过的路无法回头。所以 —— 一直前进吧!

夫君子之行,静以修身,俭以养德,非淡泊无以明志,非宁静无以致远。

导航

一个有趣的客户端注册事件

        在写一段再平常不过的代码时,突然发现一个很有趣的问题,客户端的window.location.href无法执行?
        代码很简单。我们在页面中放置一个BUTTON控件,然后在服务端的Page_Load事件中加入客户端注册代码:

if (!Page.IsPostBack)
{
    
this.Button1.Attributes["onclick"= "javascript:return ConfirmSelect();";
}
在客户端中的javascirpt中:
function ComfirmSelect()
{
    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是无效的。
    现在我们把return false这行的注释去掉,看看处理方式。在这种情况下,只有第一次alert是按照逻辑来处理的,然后页面会向服务端传递一次,再次执行第二个alert(),最后才转到我想要的页面。(顺序反了?)

       还不清楚为什么会这样,希望能得到解答。

posted on 2006-11-19 08:53  George Ge  阅读(2233)  评论(8编辑  收藏  举报