Javascript 如何防止在十进制数字后按两位数字?
我有一项任务,防止按十进制数后的两位数字。 我的jquery文件是Javascript 如何防止在十进制数字后按两位数字?,javascript,html,jquery,textinput,Javascript,Html,Jquery,Textinput,我有一项任务,防止按十进制数后的两位数字。 我的jquery文件是 $(function(){ $('#name').bind('paste', function(){ var self = this; setTimeout(function() { if(!/^[a-zA-Z]+$/.test($(self).val())) $(self).val(''); }, 0); });
$(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" />
名称
薪水
这里我只想在小数点后写两位数,我怎么能做到?
您可以在中查看我的代码。您可以在按键之前处理按键事件,如果输入不符合我们的喜好,我们可以禁用事件的发生。大概是这样的: 更新 不幸的是,我下面的原始答案在某些数字上失败了,这些数字不能准确地表示为浮点数。下面是另一个解决方案,它使用一个方便的帮助函数根据字符串的长度检查
'.
字符的位置
请注意,parseFloat(newValue)*100%1>0
如果newValue
包含超过2位小数的数字,则计算结果为true
$("#salary").keyup(function(){
var number = ($(this).val().split('.'));
if (number[1].length > 2)
{
var salary = parseFloat($("#salary").val());
$("#salary").val( salary.toFixed(2));
}
});
阻止信件进入盒子,你必须把它们放在一起,我没时间
if (this.value.match(/[^0-9]./g)) {
this.value = this.value.replace(/[^0-9]./g, '');
return false;
}
:
这可能对某些人有所帮助。我把这家伙的答案混在一起了 来自和上面的@Rick Calder 编辑 也是从这个人那里来的,我就是从这里来的 对于带“| | 0”的parseFloat。因为如果输入的字段为null或零,则会显示“NaN”,并且不能删除它 HTML
<input type="text" name="txt_prod_price" id="txt_prod_price" class="form-control price" maxlength="20" placeholder="">
JAVASCRIPT(JQUERY)
$('.price')。按键(函数(事件){
if(event.which<46 | | event.which>59){
event.preventDefault();
}//如果不是数字/点,则防止
if(event.which==46&&$(this.val().indexOf('.')!=-1){
event.preventDefault();
}//如果已点,则阻止
var number=($(this.val().split('.');
如果(编号[1]。长度>2)
{
var price=parseFloat($(“#txt_prod_price”).val())| 0;
$(“#txt#U产品价格”).val(price.toFixed(2));
}
});
“价格”是预定义的
注意:仍有错误输入,但仍在“启动”。(y)
关于toFixed的更多信息-我是这样做的:提供了一个只允许数字输入的类,然后:
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');
});
我会在人员完成数据输入时验证输入,而不是在输入时。这将使整个事情变得容易。。。只是个建议。你能帮我做这个吗?你可以在我不是一个交互设计师的网站上看到我的代码,但是作为一个用户,当我键入的所有内容都立即被更改为其他内容时,我不会太高兴。我建议告诉用户需要什么样的输入(之前和之后)。我也有同样的问题…@mrhobo-我只想在十进制数字后加两个数字。等等,我是唯一不能键入1.11或2.22的人吗?它似乎在一些输入上出现了错误。试试我的,非常确定它能工作,它对我输入的所有数字都能工作,不管怎样,你只需要做一些检查以确保它没有字母,我也会添加,给我一点时间。Grrr和删除除数字以外的任何内容进行斗争,必须运行才能工作。十进制功能有效though@Tyriar-它只在JSFIDLE上工作。它不在我的页面上工作修复了答案,使用了不同的方法。@DanielImms-它不工作。运行此代码时,键盘上的所有键都受到限制。(仅适用于firefox)你的答案是正确的,但你只提到了两个浮点。在上面的文本框中,我们不能写任何符号或字母。是的,我可以给你单独的代码来阻止它,但我没有时间将两者集成在一起,你必须这样做。呃,正如我所说,2年的代码完成了这项工作。一个额外的行修复了控制台错误。你没有什么比巨魔2岁大的反应更好的了?在这个解决方案中,我们可以添加多个小数点,在第一个小数点上,它限制用户在小数点后添加2位数字,如果您添加第二个小数点,那么解决方案将失败,但在这里我们可以写入字母。它还支持另一个浮点
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
});
});
<input type="text" name="txt_prod_price" id="txt_prod_price" class="form-control price" maxlength="20" placeholder="">
$('.price').keypress(function(event) {
if(event.which < 46 || event.which > 59) {
event.preventDefault();
} // prevent if not number/dot
if(event.which == 46 && $(this).val().indexOf('.') != -1) {
event.preventDefault();
} // prevent if already dot
var number = ($(this).val().split('.'));
if (number[1].length > 2)
{
var price = parseFloat($("#txt_prod_price").val()) || 0;
$("#txt_prod_price").val(price.toFixed(2));
}
});
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');
});