我的代码中不允许的十进制值

时间:2017-04-29 05:35:03

标签: jquery html5

我是jquery的新手。我有两个文本框的表单。因为我限制特殊字符。但我想要允许小数值。

我实现了十进制代码但没有工作。

<form>
<div class="col-md-6">
<div class="form-group ">
  <label for="minAmt" class="col-lg-4 control-label">Min.Amount</label>
  <div class="col-lg-6">
    <input type="text" class="form-control minAmt" id="minAmt" name="minAmt" placeholder="Enter Min Amount" />
  </div>
</div>
<div class="form-group ">
  <label for="maxAmt" class="col-lg-4 control-label">Max.Amount</label>
  <div class="col-lg-6">
    <input type="text" class="form-control maxAmt" id="maxAmt" name="maxAmt" placeholder="Enter Max Amount" />
  </div>
</div>
</div>
</form>

脚本:

$('.minAmt').keyup(function(e){
if($(this).val() == ""){
$('.minAmt').val('');
}else if($(this).val() > 0){
console.log($(this).val());
$(this).val(Number($(this).val()))
}
var character = String.fromCharCode(e.keyCode)
     var newValue = this.value + character;
     if (isNaN(newValue) || hasDecimalPlace(newValue, 3)) {
         e.preventDefault();
         return false;
     }
});
function hasDecimalPlace(value, x) {
     var pointIndex = value.indexOf('.');
     return  pointIndex >= 0 && pointIndex < value.length - x;
 }

我的代码有什么问题?

2 个答案:

答案 0 :(得分:0)

这里的问题是:

var character = String.fromCharCode(e.keyCode)
     var newValue = this.value + character;
     if (isNaN(newValue) || hasDecimalPlace(newValue, 3)) {
         e.preventDefault();
         return false;
     }
});

在此代码中,

var newValue = this.value + character;

它会产生一些始终为NaN的字符串 因此它总是使isNaN(newValue)= true。 它始终为true,从if块返回,因此没有“。”角色可见。

你为什么这样做。 更好地使用正则表达式。

例如,像这样:

https://jsfiddle.net/m5x7n6wr/

是的,使用按键而不是键盘。

答案 1 :(得分:0)

function isNumberKey(evt)
{
	var str = evt.target.value;
	var res = str.match(/^-?\d*\.?\d*$/g);
	if (res == null) {
		var specialChar = str.replace( /[ !@#$%^&*()_\=\[\]{};':"\\|,<>\/?]/gi, '');
		event.target.value = specialChar;
		
		var charc = str.replace(/[^a-z]/gi, '');
		if (charc != "") {
			var end = str.indexOf(charc);
			var replaceVal = str.substring(0,end);
			event.target.value = replaceVal;
		}
		var negIndex = str.lastIndexOf("-");
		if (negIndex > 0) {
			var replaceVal1 = str.substring(0,negIndex);
			event.target.value = replaceVal1;
		}
		
		var posIndex = str.lastIndexOf("+");
		if (posIndex > 0) {
			var replaceVal2 = str.substring(0,posIndex);
			event.target.value = replaceVal2;
		}
		
	}
	
}
<form>
<div class="col-md-6">
<div class="form-group ">
  <label for="minAmt" class="col-lg-4 control-label">Min.Amount</label>
  <div class="col-lg-6">
    <input type="text"  onkeyup="return isNumberKey(event)" class="form-control minAmt" id="minAmt" name="minAmt" placeholder="Enter Min Amount" />
  </div>
</div>
<div class="form-group ">
  <label for="maxAmt" class="col-lg-4 control-label">Max.Amount</label>
  <div class="col-lg-6">
    <input type="text"  onkeyup="return isNumberKey(event)" class="form-control maxAmt" id="maxAmt" name="maxAmt" placeholder="Enter Max Amount" />
  </div>
</div>
</div>
</form>