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

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

None.gif if  ( ! Page.IsPostBack)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
this.Button1.Attributes["onclick"= "javascript:return ConfirmSelect();";
ExpandedBlockEnd.gif}
在客户端中的javascirpt中:
None.gif function ComfirmSelect()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    window.location.href 
= "abc.aspx";
InBlock.gif    
//return false;
ExpandedBlockEnd.gif
}

    按照假定的逻辑,应当是从客户端直接执行window.location,而不需要再返回服务端。可实际上呢?这个客户端事件根本没有执行,服务端的Button1_Click事件依旧被执行。
    我们再把客户端Javascript改写一下,看看会发生什么情况:
None.gif function  ComfirmSelect()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    alert(
"第一次执行!");
InBlock.gif    window.location.href
="abc.aspx";
InBlock.gif    alert(
"第二次执行!");
InBlock.gif    
//return false;
ExpandedBlockEnd.gif
}
    我们会注意到,在执行第一个alert()时,状态栏中的进度条是未被加载的,紧接着,会在进度条加载的状态下显示第二个alert()。这时我们可以注意到,window.location已经被服务端的事件覆盖了。也就是说在服务端注册的客户端事件对于window.location是无效的。
    现在我们把return false这行的注释去掉,看看处理方式。在这种情况下,只有第一次alert是按照逻辑来处理的,然后页面会向服务端传递一次,再次执行第二个alert(),最后才转到我想要的页面。(顺序反了?)

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

转载于:https://www.cnblogs.com/badwood/archive/2006/11/19/564966.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值