在Javascript中将文本框限制为两位小数
我试图使用JavaScript将文本框限制为两位小数。该字段也不能以句点开头在Javascript中将文本框限制为两位小数,javascript,jquery,validation,Javascript,Jquery,Validation,我试图使用JavaScript将文本框限制为两位小数。该字段也不能以句点开头 jQuery.fn.ForceCurrencyOnly = function () { return this.each(function () { $(this).keypress(function () { //Only allow period and numbers if ((event.which != 46 || $(this).val().indexOf('.')
jQuery.fn.ForceCurrencyOnly = function () {
return this.each(function () {
$(this).keypress(function () {
//Only allow period and numbers
if ((event.which != 46 || $(this).val().indexOf('.') != -1) && (event.which < 48 || event.which > 57)) {
event.preventDefault();
}
//Prevent a period being entered first
else if (event.which == 46 && $(this).val().length == 0) {
event.preventDefault();
}
//Only two numbers after a decimal
else if (($(this).val().indexOf('.') != -1) && ($(this).val().substring($(this).val().indexOf('.'), $(this).val().indexOf('.').length).length > 2)) {
event.preventDefault();
}
});
});
jQuery.fn.ForceCurrencyOnly=函数(){
返回此。每个(函数(){
$(此).keypress(函数(){
//只允许句号和数字
if((event.which!=46 | | |$(this.val().indexOf('.')!=1)和&(event.which<48 | | event.which>57)){
event.preventDefault();
}
//防止先输入句点
else if(event.which==46&&$(this.val().length==0){
event.preventDefault();
}
//小数点后只有两个数字
else if($(this.val().indexOf('.')!=-1)和($(this.val().indexOf('.'))子字符串($(this.val().indexOf('.'),$(this.val().indexOf('.').length).length>2)){
event.preventDefault();
}
});
});
})
以上限制输入数字、单个句点和最多两位小数。我的问题是,一旦输入100.00,该值就无法突出显示并用数字删除。它必须被删除
有没有一种更简单的方法只允许货币有两位小数
感谢您的帮助。应用正则表达式验证如何:
<input type="text" pattern="^[0-9]*\.[0-9]{2}$" />
希望这有帮助 只需在最终检查中检查输入的键是否不是退格键
jQuery.fn.ForceCurrencyOnly = function() {
return this.each(function() {
$(this).keypress(function(event) {
console.log(event.which);
//Only allow period and numbers
//Only allow period and numbers
if (event.which != 8 && (event.which != 46 || $(this).val().indexOf('.') != -1) && (event.which < 48 || event.which > 57)) {
event.preventDefault();
}
//Prevent a period being entered first
else if (event.which == 46 && $(this).val().length == 0) {
event.preventDefault();
}
//Only two numbers after a decimal
else if ( event.which != 8 && (event.which < 48 || event.which > 57) && ($(this).val().indexOf('.') != -1) && ($(this).val().substring($(this).val().indexOf('.'), $(this).val().indexOf('.').length).length > 2)) {
event.preventDefault();
}
});
});
};
jQuery.fn.ForceCurrencyOnly=函数(){
返回此值。每个(函数(){
$(此).keypress(函数(事件){
console.log(event.which);
//只允许句号和数字
//只允许句号和数字
if(event.which!=8&&(event.which!=46 | | |$(this.val().indexOf('.')!=-1)&(event.which<48 | | event.which>57)){
event.preventDefault();
}
//防止先输入句点
else if(event.which==46&&$(this.val().length==0){
event.preventDefault();
}
//小数点后只有两个数字
else如果(event.which!=8&&(event.which<48 | | event.which>57)&($(this.val().indexOf('.')!=-1)&($(this.val().indexOf('.'),$(this.val().indexOf('.').length.)子字符串($(this.val().indexOf('.'))).length>2)){
event.preventDefault();
}
});
});
};
试试这个:
现场演示:
HTML: 然后,使用
.blur(..)
只需知道,如果您输入类似于20.129,您的文本框值将是20.13(这意味着该值将被舍入)
我已经测试了许多可能的情况,效果很好,也许您可以根据需要自定义函数以用于其他目的。试试这个
$("#YourtxtId").keypress(function () {
var txt = $("#YourtxtId").val();
if (txt.indexOf(".") > -1 && txt.split(".")[1].length > 1) {
var substr = txt.split(".")[1].substring(0, 1);
$("#YourtxtId").val(txt.split(".")[0] + "." + substr);
}
jQuery.fn.getNum = function() {
var val = $.trim($(this).val());
if(val.indexOf(',') > -1) {
val = val.replace(',', '.');
}
var num = parseFloat(val);
var num = num.toFixed(1);
if(isNaN(num)) {
num = '';
}
return num;
}
$(function() {
$('#txt').keyup(function() {
$(this).val($(this).getNum());
});
});
编辑了我的答案。如果您使用的是html5,它应该可以工作。按delete可以很好地删除输入。我希望能够通过突出显示100.00并输入1(例如)来删除输入。这就是我通常清除字段的方式。@ministrymason更新了代码,以便在突出显示输入并按下数字键时进行检查。如果检查js fiddle链接并发现它也在使用alpha?@Thomas您能提供一个示例吗?
$(function() { //onReady handler for document
$('#txt').blur(function() { //onBlur handler for textbox
$(this).val($(this).getNum()); //invoke your function, you can use it with other selectors too
});
});
$("#YourtxtId").keypress(function () {
var txt = $("#YourtxtId").val();
if (txt.indexOf(".") > -1 && txt.split(".")[1].length > 1) {
var substr = txt.split(".")[1].substring(0, 1);
$("#YourtxtId").val(txt.split(".")[0] + "." + substr);
}
jQuery.fn.getNum = function() {
var val = $.trim($(this).val());
if(val.indexOf(',') > -1) {
val = val.replace(',', '.');
}
var num = parseFloat(val);
var num = num.toFixed(1);
if(isNaN(num)) {
num = '';
}
return num;
}
$(function() {
$('#txt').keyup(function() {
$(this).val($(this).getNum());
});
});