回车变成Tab的解决方案
IE会将页面上的第一个按钮自动设为默认按钮。当用户在页面上按回车键时,就会触发这个默认按钮。事实上,有很多用户有在TextBox中输入数据之后按回车的习惯(似乎是长期使用Excel养成的习惯)。想像一下,当用户依次在20个TextBox中输入了数据之后,一不小心习惯性地按了一下回车,而该页面上的默认按钮是“检索”按钮!@##¥@...刚刚的工作全部丢失了。
有了VS2005,这个问题似乎一下子变得容易解决了,因为在VS2005的页面中,每个Panel都可以指定一个DefaultButton。我们可以把这个DefaultButton设置成“保存”按钮,这样当用户按下回车时会自动触发“保存”按钮。
不过有时我们希望当用户在页面上按回车键时就是什么也不做,或者,希望用户在按了回车后焦点会转移到下一个TextBox上。
我参考了VS2005的 WebForm_FireDefaultButton() 函数和网上的一些代码,弄了一个可以满足上述需求的解决方案,它的特性包括:
- 全部JavaScript代码都封装在了一个用户控件"EnterAsTab_SubPage.ascx"中,哪个页面想要回车变Tab或者屏蔽掉回车键只要把这个控件拖到那个页面上就可以了。
- 可以在运行时通过修改用户控件"EnterAsTab_SubPage.ascx"的属性"DiscardIEDefaultButton"和"EnterAsTab"的值来动态决定是否启用回车键变成Tab键的功能。
- 在启用回车键变成Tab键的功能的状态下,不会影响到Panel的默认按钮的触发。换句话说,如果在Panel中设置了默认按钮,那么在Panel内的文本框中按回车仍然会触发默认按钮,而不会变成按Tab键的效果。
下面是示例程序的截图:
实现原理
原理很简单,就是截获onkeypress事件,然后调用下一个控件的focus()方法。一共才30几行JavaScript代码,相信你一看就能懂,我就不多说了。
下载全部源代码
http://download.csdn.net/source/197432