只有在输入中使用点(不是逗号)浮点值 – jQuery

我希望在输入中始终只使用点(不是逗号)浮点值。

 


$('.dot').keydown(function(){ $(this).val($(this).val().toString().replace(/\,/g, '.')); })

这将逗号替换为点,但这不应该有> 1点和其他…这应该只接受[0-9]和。

如果我输入的值不同于其他[0-9]和。 那么这个值应该删除 – ”。

我该怎么做?

http://jsfiddle.net/ZtkBW/

Hiya 演示 http://jsfiddle.net/9Ry9t/ http://jsfiddle.net/ZtkBW/2/ http://jsfiddle.net/HJnLD/

与您的解决方案略有不同,但如果您希望使用此解决方案,则不允许在文本框中键入任何characters

该解决方案对数字进行完全validation,对浮点数进行完全validation(点)

代码示例

 $('.number').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 });​ 

这是一个非常糟糕的if语句来规避parseFloat可以解析它在字符串中找到的第一个数字,而indexOf只返回字符的第一个索引(不是所有索引)。

$(this).val()的值存储在变量中可能会更聪明,但我会将其作为练习留给读者。 (现在没时间)

 if(!isNaN(parseFloat($(this).val()) && $(this).val().indexOf(".") > -1 && $(this).val().indexOf(".") == $(this).val().lastIndexOf(".")) { // do something, your value is a valid float } 

你可以试试这个:

http://jsfiddle.net/ZtkBW/5/

 var parseInput = function(val) { var floatValue = parseFloat(val); return isNaN(floatValue) ? '' : floatValue; } $('.number').keyup(function(){ var value = $(this).val()+''; if (value[value.length-1] !== '.') { $(this).val(parseInput(value)); } }).focusout(function(){ $(this).val(parseInput($(this).val()+'')); }) 

我使用keyup来避免显示无效的字符。 正如评论中提到的,我也使用了焦点。 如果最后输入的字符是“。”,我不会解析。 因为您将无法输入小数值。

 $('.dot').keydown(function(){ $(this).val($(this).val().toString().replace(/^[0-9]\./g, ',') .replace(/\./g, '')); })​ 

它的表现如何

我不确定你想做什么
但是怎么样呢

 $(this).val(parseFloat($(this).val()) || 0); 

我有同样的问题 – 需要一个文本输入只接受一个整数或十进制输入(只有一个。)不得不混合几个解决方案,但现在这个工作:

 $(".dot").keyup(function(event){ this.value=this.value.replace(/[^0-9.]/g,''); var parts=this.value.split("."); var decimal=false; for(var part in parts) { if(part==0) this.value=parts[part]; if(part==1) this.value=this.value+"."+parts[part]; } }); 

试试这个 :

 $("#txtSellerPrice").keydown(function (e) { if (e.keyCode == 110 && this.value.split('.').length == 2) { e.preventDefault(); } if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 190,110]) !== -1 || (e.keyCode == 65 && ( e.ctrlKey === true || e.metaKey === true ) ) || (e.keyCode >= 35 && e.keyCode <= 40)) { return; } if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) { e.preventDefault(); } });