2007年6月20日星期三

回车变成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

没有评论: