[翻译]基于ASP.NET的NumericTextBox控件[Carol]
原文地址:http://www.codeproject.com/useritems/ASPNET_NumericTextBox.asp
demo下载
源码下载
基于ASP.NET的NumericTextBox控件<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
原作者:Lukas Holota 译者:Carol
只允许用户输入数字的ASP.NET控件
导言:
所有的程序都必须是“傻瓜式”的,因此我们正创建检验用户输入的控件,这便是其中之一。在这个网站(译者注:codeproject)我只找到了针对windows forms的解决方案。以下是ASP.NET解决方案的展示:
首先,对于控件有这样一个概念,它必须具备以下能力:
- 可选择输入负数
- 可选择输入小数或整数
- 可以从语言环境设置中自由选择或下载小数分隔符
- 处理ctrl+v
- 具备跨浏览器的兼容性
解决方案——关键点
- 处理所有的字符――最后我选择了“onkeypress”事件,因为如果基于这一事件的方法返回错误的话,字符将不会被键入文本框
- 过滤字符――所有字符都只有一个键代码,所以我只得把被允许的字符都列了个清单(由数字键盘上输入的数字与键盘顶行输入的数字的代码是不同的)并且像Shift, BackSpace, Delete and arrows这些功能键都必须是被允许的-只需一会儿的检测
- 可选择减号――减号必须是这一数值的第一个字符,因此我必须对有兼容性问题的光标位置进行校对,最后解决如下:
· function getCursorPosition(txt)
· {
· if(document.selection) // IE
· {
· txt.focus();
· var oSel = document.selection.createRange();
· oSel.moveStart('character', -txt.value.length);
· return oSel.text.length;
· }
· else(txt.selectionStart) // Firefox etc.
· return txt.selectionStart;
· }
- 可选择小数分隔符――哪一个?――这一控件允许输入小数或整数,但是不同国家使用不同的小数分隔符,所以我制作了一个能根据文化背景动态下载设置的方法:
private char GetDecimalSeparatorFromLocale()
{
return (System.Globalization.CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator.ToCharArray())[0];
}
- 小数分隔符必须符合一下几个条件:
- 必须是第一个字符
- 必须不是在减号后面
- 在一个数值中必须只有一个小数分隔符
这一“优美”的条件可检测所有这些条件:
if(txt.value.replace("-", "").length > 0 && getCursorPosition(txt) > 0 && txt.value.indexOf(decimalSeparator) == -1 && decimals)
return true;
else
return false;
break;
。处理Ctrl + V——我曾多次去解决这一问题,最后最简单的方法却运作地最好,在“onchage”事件中有一检测方法。除了数字,可选择地减号以及小数字符外,不管字符是否被允许,都可以被检测
Collapse
function CheckString(txt, negative, decimals, decimalSeparator)
{
var res = "";
var decimalSeparatorCount = 0;
for(i = 0; i < txt.value.length; i++)
{
if(i == 0 && txt.value.charAt(0) == "-" && negative)
res = "-";
else
{
if(IsNumber(txt.value.charAt(i))) // IsNumber function returns true if the char is 0-9
res += txt.value.charAt(i);
else
{
if(txt.value.charAt(i) == decimalSeparator && decimalSeparatorCount == 0 && decimals)
{
res += txt.value.charAt(i);
decimalSeparatorCount++;
}
}
}
}
txt.value = res;
}
- 跨浏览器的兼容性
- 就如我上文提到的,IE6,7对于确定光标位置有问题
- Safari为不同的功能键返回不同的键代码-对所有的键返回0,但是数字以及其他一些不被允许的字符的代码运行正常
- 已被检测的浏览器:IE 6,7, Opera 9, Firefox 2, Safari for windows beta 3, Netscape 8 (与firefox一样, 用于 Gecko engine)
使用代码
使用这一代码很简便,因为它继承了文本框格式,因此你可以校验和访问文本框里的值
<cp:NumericTextBox AllowNegative="true" AllowDecimals="true" runat="server" ID="NumericTextBox1" />
这一控件主要是基于javascript,因此它可以简单地运用于其他平台。例如PHP, JSP等等,也可以用于ASP.NET。如果把它翻译了,请告知。
ps:这篇文章的控件我还没有用过,如发现有什么Bug,请与原作者联系
转载于:https://www.cnblogs.com/dotLive/archive/2007/10/15/924620.html
[翻译]基于ASP.NET的NumericTextBox控件[Carol]相关推荐
- 构建安全的 ASP.NET 网页和控件
本页内容 本模块内容 目标 适用范围 如何使用本模块 威胁和对策 设计注意事项 输入验证 跨站点脚本 身份验证 授权 模拟 敏感数据 会话管理 参数处理 异常管理 审核和日志记录 小结 其他资源 本模 ...
- asp.net的常用控件
ASP.NET常用第三方控件列表 ASP.NET 漂亮的免费甘特图控件 基于flash与javascript的客户端文件上传组件 在线Word/excel/wps编辑辅助控件 一个三维动态滑块效果的功 ...
- ★★★【庖丁解牛:纵向切入Asp.net 3.5控件和组件开发技术系列—(1)读者序】★★★...
本书主要内容 大部分开发人员在学习Asp.net的过程中都有这样的体会,使用Asp.net开发很多年,但仍然感觉对Asp.net技术的了解比较少,对知识点的了解比较模糊:以及,在工作过程中经常接到克刻 ...
- 【开源】我的分页控件正式命名为QuickPager ASP.NET2.0分页控件
分页控件正式命名为 QuickPager ASP.NET2.0分页控件 . 版本号:2.0.0.1 Framework:.net2.0 分页方式:PostBack .URL (暂时没有实现URL的分页 ...
- ASP.NET Atlas简单控件介绍——InputControl,TextBox,Button和CheckBox
作者:Dflying Chen (http://dflying.cnblogs.com/) 注:本系列文章比较基础,基本为Atlas官方文档的翻译,熟悉Atlas的朋友可以跳过. 本系列有三篇文章: ...
- 【开源】QuickPager ASP.NET2.0分页控件V2.0.0.3 【增加了使用说明】
================================ 欢迎转载,但是请注明出处.本文出自博客园 .谢谢合作! ================================ 最新版本:V ...
- jQuery:收集一些基于jQuery框架开发的控件/jquery插件2
Horizontal accordion: jQuery 基于jQuery开发,非常简单的水平方向折叠控件. 主页:http://letmehaveblog.blogspot.com/2007/10/ ...
- 用JS验证asp.net服务端控件
可以用javascript来验证asp.net服务端的控件,不过目前只局限于验证textbox(输入框)不能为空的情况.还有一个前提条件是,提交按钮必须是html的控件,再加上一个runat=serv ...
- ASP.NET如何给控件增加属性?
ASP.NET如何给控件增加属性? 今天xuedaonet给大家介绍提利用ASP.NET给控件增加属性的操作方法,请看下文! ASP.net给控件增加属性的思路 因为用户控件也是一个类,双城计中计20 ...
最新文章
- bzoj 1086: [SCOI2005]王室联邦
- thinkphp5的目录结构和命名规范
- 从命令行传递其他变量来制作
- linux 安装tomcat 权限不足问题
- mac m1下golang连接mysql极速入门
- react-native 安装的时候遇到的问题
- 六年级计算机应用计划,六年级信息工作计划
- Android Studio打包Android Library为jar方案
- dockerfile制作镜像及k8s中应用
- Python学习总结(3)——数字类型
- delphi xe10.4.2 datasnap客户端接收dataset返回值
- maven-maven使用-P参数打包不同环境
- redis的过期策略【转】
- 互联网+制造业,让你的生产管理更容易
- 用vivo手机拍照一定要先打开这个设置,不然白浪费这么强大的手机
- 平衡二叉树(注意LR和RL)
- Deep Speech笔记
- Qemu gdb 调试 Liteos realview-pbx-a9 工程
- Spring Boot 接口数据加解密就该这样设计~
- far在c语言中作用,C语言中的far关键字