asp.net webform中submit按钮使用不当很容易犯的一个错误
时间:2011-03-31 来源:菩提树下的杨过
webform中默认一个页面只能有一个form,有时submit按钮使用不当会产生一些奇怪的问题。
比如这是一个网站的头部搜索部分,前端人员把“搜索”按钮用<input type="submit" />处理,然后在js中文本框里按下回车键时,自动调用doSearch()函数,该函数可能类似下面这样:(只是表达一下大概的意思)
function doSearch(){
window.location="search.aspx?w=abc";
return false;
}
“搜索”按钮的click事件中,用类似 onClick="doSearch()"来处理,本来这样处理也没什么不对,不管是在文本框中按下回车,还是点击“搜索”按钮都是ok的。但是如果遇到下面的情况,且二部分功能是不同的程序员来写时,就可能出问题:
另一个前端开发人员把“登录模块”加进来以后(注:“登录”按钮用的是服务端Button控件,即最终在html中也是submit按钮,单独点击“登录”按钮时,一切正常),但是在一个form中,在任何一个文本框上按下回车键时,相当于默认点击了第一个submit按钮(即提交表单),这样在登录过程中,当用户输入完邮箱、密码、验证码,按下回车键的时候,实际上会触发“搜索”按钮的click行为,而搜索按钮在上面的处理中,调用的是doSearch()方法,最终页面会引导到搜索页上,并未按原来的意图提交,导致登录不了。
“各自单独的模块”独立测试时都是正常的,但是整合在一起就容易出问题了,所以说这种错误容易犯,我的建议是对于webform中的开发,不是必须要submit的场景,尽量避免用submit按钮。