html文本框只能输入数字

进行web前端开发,会经常遇到校验文本框内容的情形.比如校验用户输入的手机号是否合法.

其实我们可以从根本上减少用户犯错的机会,比如文本框只能输入数字,若输入非数字字符,则马上被删除.

界面:

 第一个文本框,输入字母时会立即把字母替换为空字符串.

核心js方法:

Js代码   收藏代码
  1. /* 
  2.  * 只能输入正整数,不能有小数点 
  3.  *  
  4.  */  
  5. onlyIntegerKeyUp=function(e){  
  6.     if(e===undefined){  
  7.         e=window.event;  
  8.     }  
  9.     var obj=e.srcElement?e.srcElement:e.target;  
  10.     var pattern = /[^\d]/ig;  
  11.     var val=obj.value;  
  12.     if(pattern.test(val)) {  
  13.         var i=getCursortPosition(e);  
  14.         obj.value=val.replace(pattern,'');  
  15.         setCaretPosition(e,i);  
  16.     }  
  17. };  
  18. /******************************************************************************* 
  19.  * 获取光标位置 
  20.  *  
  21.  * @param ctrl 
  22.  * @returns {Number} 
  23.  */  
  24. getCursortPosition=function(event) {// 获取光标位置函数  
  25.     if (event === undefined || event === null) {  
  26.         event = arguments.callee.caller.arguments[0] || window.event;  
  27.     }  
  28.     var obj = event.srcElement?event.srcElement:event.target;  
  29.     var CaretPos = 0;   // IE Support  
  30.     if (document.selection) {  
  31.         obj.focus ();  
  32.         var Sel = document.selection.createRange ();  
  33.         Sel.moveStart ('character', -obj.value.length);  
  34.         CaretPos = Sel.text.length;  
  35.     } else if (obj.selectionStart || obj.selectionStart == '0'){  
  36.         // Firefox support  
  37.         CaretPos = obj.selectionStart;  
  38.     }  
  39.   
  40.     return (CaretPos);  
  41. };  
  42. /******************************************************************************* 
  43.  * 设置光标位置 
  44.  *  
  45.  * @param ctrl 
  46.  * @returns {Number} 
  47.  */  
  48. setCaretPosition=function(event, pos){// 设置光标位置函数  
  49.     if (event === undefined || event === null) {  
  50.         event = arguments.callee.caller.arguments[0] || window.event;  
  51.     }  
  52.     var obj = event.srcElement?event.srcElement:event.target;  
  53.     if (pos > 0) {  
  54.         pos = pos - 1;//因为把不匹配的字符删除之后,光标会往后移动一个位置  
  55.     }  
  56.     if(obj.setSelectionRange){  
  57.         obj.focus();  
  58.         obj.setSelectionRange(pos,pos);  
  59.     } else if (obj.createTextRange) {  
  60.         var range = obj.createTextRange();  
  61.         range.collapse(true);  
  62.         range.moveEnd('character', pos);  
  63.         range.moveStart('character', pos);  
  64.         range.select();  
  65.     }  
  66. };  
  67. /* 
  68.  * 只能输入数字和字母 
  69.  *  
  70.  */  
  71. onlyNumAndAlphKeyUp=function(event){  
  72.     if(event===undefined){  
  73.         event=window.event;  
  74.     }  
  75.     var obj=event.srcElement?event.srcElement:event.target;  
  76.     var pattern = /[^\w]/ig;  
  77.     if(pattern.test(obj.value)) {  
  78.         var i=getCursortPosition(event);  
  79.         obj.value=obj.value.replace(pattern,'');  
  80.         setCaretPosition(event,i);  
  81.     }  
  82. };  

 

页面代码:

Html代码   收藏代码
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head lang="en">  
  4.     <meta charset="UTF-8">  
  5.     <title></title>  
  6.     <script type="application/javascript" src="jquery-1.11.1.js"></script>  
  7.     <script type="application/javascript" src="comm.js"></script>  
  8. </head>  
  9. <body>  
  10. 只能输入数字: <input type="text" onkeyup="onlyIntegerKeyUp(event)"/><br>  
  11. <br>  
  12. 只能输入数字和字母: <input type="text" onkeyup="onlyNumAndAlphKeyUp(event)"/><br>  
  13. </body>  
  14. </html>  

 

为什么会有getCursortPosition()和setCaretPosition() 

因为通过js替换非法字符之后,光标的位置变化了.所以这两个方法用于在替换之前保存(记录)光标位置,替换之后恢复光标位置.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值