天天看点

asp.net取消页面表单内文本输入框的Enter响应

一、初步分析和实现:

1、页面继承一个基类BasePage,基类继承自Page类,在基类中注册特定服务器控件的onkeydown脚本事件

asp.net取消页面表单内文本输入框的Enter响应

Code

这样,想取消“enter key”功能的页面只有继承一下BasePage类即可。

2、用户控件的处理:我的思路就是在基类中继续处理用户控件内部的runat=server的控件,测试也是通过的。

3、页面中和用户控件里的没有runat=server标签的html控件,直接给这些html控件添加onkeydown事件。

下面是测试页面和其对应的类文件:

Test.aspx页面:

asp.net取消页面表单内文本输入框的Enter响应

类:

asp.net取消页面表单内文本输入框的Enter响应

接着是一个用户控件:

asp.net取消页面表单内文本输入框的Enter响应

在笔者的机器上,对TextBox,HtmlInputText和没有runat=server标签的html控件以及三者组合成的用户控件按照上面的思路按下enter键运行效果果然没有回发了。

二、脚本改进时碰到的问题

然后我看到if(event.which || event.keyCode){if ((event.which == 13) || (event.keyCode == 13)) {return false;}}这一句不断地出现,就好心把它在页面里封装成JavaScript函数叫forbidInputKeyDown(ev):

asp.net取消页面表单内文本输入框的Enter响应

然后onkeydown的方法对应的事件就是“forbidInputKeyDown(event)”(比如对于页面中服务器端的TextBox控件在注册客户端事件的时候就改写成 webControl.Attributes.Add("onkeydown", "forbidInputKeyDown(event)");),奇怪的是,这一次,页面又回发了?! 然后脚本调试,forbidInputKeyDown函数也执行了,可是form还是被提交了。

我又看了一下脚本位置,把它从head移动到body内,问题依旧。然后怀疑是不是脚本错了?不对,脚本没错。难道是人品有问题?有问题吗,这个自信真没有。注册事件错了吗?嗯......

我kao,恍然大悟,注册事件应该这么写的:onkeydown="return forbidInputKeyDown(event)",也就是forbidInputKeyDown函数前面加上return就好了,还是人品啊,囧。

本文转自JeffWong博客园博客,原文链接:本文转自JeffWong博客园博客,原文链接:XXXXXXXX,如需转载请自行联系原作者,如需转载请自行联系原作者

继续阅读