我是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;
}
我的代码有什么问题?
答案 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>