input 控制只能输入非负金额的另一种方式

今天看了看,前端同事的代码,居然发现了 他的控制 金额 输入的方式,挺好的,学习一下了。

下面是代码

<td>金额 : </td>
				<td>
					<span class="webname">
						<input name="amount" type="text" id="amount" onkeyup="onlyNumber(this)"  value="$!upDate.amount" size="40" />
          			</span> <span style="color: red;font-weight: bold;">*</span>
				</td> 


js :

function onlyNumber(obj){    
        
        //得到第一个字符是否为负号    
        var t = obj.value.charAt(0);      
        //先把非数字的都替换掉,除了数字和.     
        obj.value = obj.value.replace(/[^\d\.]/g,'');       
         //必须保证第一个为数字而不是.       
         obj.value = obj.value.replace(/^\./g,'');       
         //保证只有出现一个.而没有多个.       
         obj.value = obj.value.replace(/\.{2,}/g,'.');       
         //保证.只出现一次,而不能出现两次以上       
         obj.value = obj.value.replace('.','$#$').replace(/\./g,'').replace('$#$','.');  
         obj.value = obj.value.replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3');  
         //如果第一位是负号,则允许添加    
         if(t == '-'){    
              
           return;  
         }    

    } 

 

这个是后台页面,大家把重点放在 js 好吧。 他这里写是  能输入 - 负号,其实是不可以的.

 

另一种方式

当然如果 不要求那么高体验的话, 也可以这样 

只能输入 数字,
 保留2位小数
 onkeyup="if(isNaN(value))execCommand('undo')" 
 
 onchange="changeInput()" 
 
function changeInput(){
	var $value= $("#"+id).val();
	
	if( $.trim($value)=="" || isNaN($value) ){
		$("#"+id).val("");
		return ;
	}
	
	$("#"+id).val(parseFloat($value).toFixed(2));
	
}

// 使用改变事件,强行变为 有两位小数的 值

 

var testMoney=/(^[1-9](\d+)?(\.\d{1,2})?$)|(^(0){1}$)|(^\d\.\d{1,2}?$)/; //正则金额 
		$("#money").bind("input propertychange", function(){  

     var nowMoney=$("#money").val();
			if(nowMoney==""){
				
				return;
			}

          if(!testMoney.test(nowMoney)){
				if( nowMoney.substring(nowMoney.length-1,nowMoney.length)=="."
				&& nowMoney.indexOf(".")== (nowMoney.length-1) ){
					// 说明此时最后是 点号,金额没有输入完
					return;
				}
				$("#money").val("");
				return  ;
			}



});  

 

另一种更方便的:

只能有两位小数,再次校验是否是数字即可

<input type="text" name="price" id='price'  οnkeyup="if( ! /^\d*(?:\.\d{0,2})?$/.test(this.value)){alert('只能输入数字,小数点后只能保留两位');this.value='';}" />

 

另一种 更加的方便实用

就是 这个了, 直接可以控制非负 数字的输入,同时保留了2位小数

<input type="number" name="FirstName"  οnkeyup="this.value = this.value.replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3');"  />

注意 type="number" 是必须的

 

 

 

 

转载于:https://my.oschina.net/ouminzy/blog/1844965

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值