我正在尝试使用JavaScript将文本框限制为两位小数。该字段也不能以句点开头。
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();
}
});
});
};
以上将输入限制为数字,单个句点和最多两个小数位。我的问题是输入100.00后,无法突出显示值并使用数字删除。它必须删除。
是否有更简单的方法只允许两位小数的货币?
任何帮助表示感谢。
答案 0 :(得分:3)
现场演示: http://jsfiddle.net/oscarj24/8JEF9/
<强> HTML: 强>
Number: <input type="text" id="txt" />
<强> jQuery的: 强>
创建 jQuery function
,以便始终获得预期格式的number
:
jQuery.fn.getNum = function() {
/* trim the string value */
var val = $.trim($(this).val());
/* replace all ',' to '.' if present */
if(val.indexOf(',') > -1) {
val = val.replace(',', '.');
}
/* parse the string as float */
var num = parseFloat(val);
/* use two decimals for the number */
var num = num.toFixed(2);
/* check if 'num' is 'NaN', this will happen
* when using characters, two '.' and apply
* for other cases too.
*/
if(isNaN(num)) {
num = '';
}
return num;
}
然后,强制textbox
使用value
.blur(..)
$(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
});
});
要知道,如果您输入 20.129 之类的内容,您的文本框值将为 20.13 (这意味着该值将被舍入)。
我已经测试了很多可能的情况并且工作正常,也许您可以根据自己的需要自定义function
。
答案 1 :(得分:0)
如何应用RegEx验证:
<input type="text" pattern="^[0-9]*\.[0-9]{2}$" />
希望这有帮助!
答案 2 :(得分:0)
在最终检查中检查输入的密钥是否不是退格
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();
}
});
});
};
答案 3 :(得分:0)
试试这个..
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());
});
});
答案 4 :(得分:-1)
$("#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);
}