夫君子之行,静以修身,俭以养德,非淡泊无以明志,非宁静无以致远。
在写一段再平常不过的代码时,突然发现一个很有趣的问题,客户端的window.location.href无法执行? 代码很简单。我们在页面中放置一个BUTTON控件,然后在服务端的Page_Load事件中加入客户端注册代码:
posted on 2006-11-19 08:53 George Ge 阅读(1928) 评论(8) 编辑 收藏 网摘 所属分类: ASP.NET
细小的问题,没太注意,有时很奇怪,编程时不能运行,可是过了一阵子就可以了, 回复 引用 查看
首先是这样的: <form id="form" method="post"> <input type="submit" id="button"></form> 按钮没有挂任何的js事件,点按钮form会post到服务器端 <form id="form" method="post"> <input type="submit" id="button" onclick="return f()"></form> 按钮挂上js事件后,form表单会不会提交取决于f是否为真,比如下面的 <form id="form" method="post"> <input type="submit" id="button" onclick="return false"></form>肯定不会提交表单 明白这些后,如果ComfirmSelect没有明确值,即没有明确form.onclick = function (){return false},表单就会被提交。还有一点需要注意,表单被提交的时候js事件都会被释放掉。 另外还有一点需要注意,当表单中有附件提交时,form.submit();document.location.href = "orther.aspx";这时表单的附件将不会被服务器得到。 回复 引用 查看
需要用 return false 来终止 form 提交,这没什么奇怪的。另外一个需要考虑的就是 event bubbling 的问题。 回复 引用 查看
把最终生成的html打开看一下为什么会这样 回复 引用 查看
@布尔 @木野狐 问题不在于这里,我并不是说要终于FORM的提交,而是说两点:1、JAVASCRIPT中的执行并没有按我想像的顺序来执行;2、提交到服务端之前应当先执行客户端事件的,但是alert()可以执行,window.location却不能执行。即便我用了return false,可如果存在window.location,还是一样会进行一次FORM的提交,这却是不我想的。 回复 引用 查看
使用type="button"的按钮,submit的用法不是这样的 回复 引用
如果只需要客户端事件,那就不要用<asp:Button>,用<input type=button>应该没有这个问题了,如果客户端事件后继续执行服务器端事件,建议使用onclientclick属性。 回复 引用
将window.location.href写到服务器端, runat server的button是先执行客户端,后执行服务器端 回复 引用 查看
Powered by: 博客园 Copyright © George Ge