我有插件。 您可以在看到演示: http://jsfiddle.net/nangvabien/8Uuvb/
如果小数分隔符= “,”或“。”,则在文本框中输入用户: 1000000 ,,,, ... 5 - >格式: 1.000.000,5 ,或 12300000。,, .. 5 - >格式 12,300,000.5
我想只有小数点分隔符。请帮我改进插件FormatNummer。
答案 0 :(得分:3)
我做过一些可以帮助你的事情: Live control a float input with a regex mask
$('.numeric_input').live("keyup",function(){inputControl($(this),'int');});
$('.float_input').live("keyup",function(){inputControl($(this),'float');});
function inputControl(input,format)
{
var value=input.val();
var values=value.split("");
var update="";
var transition="";
if (format=='int'){
expression=/^([0-9])$/;
finalExpression=/^([1-9][0-9]*)$/;
}
else if (format=='float')
{
var expression=/(^\d+$)|(^\d+\.\d+$)|[,\.]/;
var finalExpression=/^([1-9][0-9]*[,\.]?\d{0,3})$/;
}
for(id in values)
{
if (expression.test(values[id])==true && values[id]!='')
{
transition+=''+values[id].replace(',','.');
if(finalExpression.test(transition)==true)
{
update+=''+values[id].replace(',','.');
}
}
}
input.val(update);
}
您可以在此处看到它:http://jsfiddle.net/8Uuvb/1/
答案 1 :(得分:0)
以下是我的带有fiddle的十进制文本字段的解决方案。它适用于负数和复制/粘贴。
$('input').bind('paste', function () {
var self = $(this);
var orig = self.val();
setTimeout(function () {
var pasted = getTextDiff(orig, $(self).val());
if(isNaN(Number($(self).val())))
$(self).val($(self).val().replace(pasted, ''));
console.log(pasted);
});
});
$("input").keypress(function (event) {
var inputCode = event.which;
var currentValue = $(this).val();
if (inputCode > 0 && (inputCode < 48 || inputCode > 57)) {
if (inputCode == 46) {
if (getCursorPosition(this) == 0 && currentValue.charAt(0) == '-') return false;
if (currentValue.match(/[.]/)) return false;
}
else if (inputCode == 45) {
if (currentValue.charAt(0) == '-') return false;
if (getCursorPosition(this) != 0) return false;
}
else if (inputCode == 8) return true;
else return false;
}
else if (inputCode > 0 && (inputCode >= 48 && inputCode <= 57)) {
if (currentValue.charAt(0) == '-' && getCursorPosition(this) == 0) return false;
}
});
function getCursorPosition(element) {
if (element.selectionStart) return element.selectionStart;
else if (document.selection)
{
element.focus();
var r = document.selection.createRange();
if (r == null) return 0;
var re = element.createTextRange(),
rc = re.duplicate();
re.moveToBookmark(r.getBookmark());
rc.setEndPoint('EndToStart', re);
return rc.text.length;
}
return 0;
}
function getTextDiff(first, second) {
var start = 0;
while (start < first.length && first[start] == second[start]) {
++start;
}
var end = 0;
while (first.length - end > start && first[first.length - end - 1] == second[second.length - end - 1]) {
++end;
}
end = second.length - end;
return second.substr(start, end - start);
}