我有一项任务是防止在十进制数字后按两位数字。 我的jquery文件是
$(function(){
$('#name').bind('paste', function(){
var self = this;
setTimeout(function() {
if(!/^[a-zA-Z]+$/.test($(self).val()))
$(self).val('');
}, 0);
});
$('#salary').bind('paste', function(){
var self = this;
setTimeout(function() {
if(!/^\d*(\.\d{1,2})+$/.test($(self).val()))
$(self).val('');
}, 0);
});
$('.decimal').keyup(function(){
var val = $(this).val();
if(isNaN(val)){
val = val.replace(/[^0-9]./g,'');
if(val.split('.').length>2)
val =val.replace(/\.+$/,"");
}
$(this).val(val);
});
});
我的html页面是
<b>Name</b>
<input type="text" id="name" /><br/>
<b>Salary</b>
<input type="text" id="salary" class="decimal" />
这里我只想在小数点后写2位数,我该怎么做? 您可以在http://jsfiddle.net/V6s4B/
中查看我的代码答案 0 :(得分:13)
您可以在keyup
keypress
之前处理关键事件,如果输入不符合我们的喜好,我们可以禁用事件发生。像这样:
不幸的是,我的原始答案在某些无法准确表示为浮点数的数字上失败。这是另一种解决方案,它使用方便的帮助函数检查'.'
字符与字符串长度的位置。
$('.decimal').keypress(function (e) {
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;
}
$('.decimal').keypress(function (e) {
var character = String.fromCharCode(e.keyCode)
var newValue = this.value + character;
if (isNaN(newValue) || parseFloat(newValue) * 100 % 1 > 0) {
e.preventDefault();
return false;
}
});
请注意,如果parseFloat(newValue) * 100 % 1 > 0
包含的小数位数超过2,则newValue
的计算结果为真。
答案 1 :(得分:4)
$("#salary").keyup(function(){
var number = ($(this).val().split('.'));
if (number[1].length > 2)
{
var salary = parseFloat($("#salary").val());
$("#salary").val( salary.toFixed(2));
}
});
http://jsfiddle.net/calder12/fSQpc/
阻止信件进入方框,你必须将两者放在一起,我没有时间。
if (this.value.match(/[^0-9]./g)) {
this.value = this.value.replace(/[^0-9]./g, '');
return false;
}
答案 2 :(得分:0)
Another Possible Solution(Demo):
Number.prototype.toFixedDown = function(digits) {
var n = this - Math.pow(10, -digits)/2;
n += n / Math.pow(2, 53); // added 1360765523: 17.56.toFixedDown(2) === "17.56"
return n.toFixed(digits);
}
$( function() {
$('.two-digits').keyup(function(){
if($(this).val().indexOf('.')!=-1){
if($(this).val().split(".")[1].length > 2){
if( isNaN( parseFloat( this.value ) ) ) return;
this.value = parseFloat(this.value).toFixedDown(2);
}
}
return this; //for chaining
});
});
答案 3 :(得分:0)
这可能对某些人有所帮助。我混合了这个人的答案,@ Tats_innit 来自https://stackoverflow.com/a/10514166/5382523和@Rick Calder。
修改强> 同样来自这个家伙,是来自https://stackoverflow.com/a/17289322的JustMeustMe 对于带有“|| 0”的parseFloat。因为如果输入的字段为空或零,则显示“NaN”并且您无法删除它。
<强> HTML 强>
sys.settrace(self.trace_dispatch)
-> trace_dispatch() -> dispatch_line() -> user_line() -> interaction()
JAVASCRIPT(JQUERY)
<input type="text" name="txt_prod_price" id="txt_prod_price" class="form-control price" maxlength="20" placeholder="">
“价格”是预定义的。
注意:仍然有错误的输入,但仍然踢。 (y)的
有关toFixed - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed
的更多信息答案 4 :(得分:0)
我是这样做的:提供一个类allow-only-numbers,然后输入:
var numberOfDecimals = 2;
$(document).on("input", ".allow-only-numbers", function () {
var regExp = new RegExp('(\\.[\\d]{' + numberOfDecimals + '}).', 'g')
this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1').replace(regExp, '$1');
});