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

时间:2012-05-09 10:17:09

标签: javascript jquery

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

<input type="text" class="dot"> <br />
<input type="text" class="dot"> <br />
<input type="text" class="dot"> <br />

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

将逗号替换为点,但这不应该是&gt; 1点和其他......这应该只接受[0-9]和。

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

我该怎么做?

http://jsfiddle.net/ZtkBW/

7 个答案:

答案 0 :(得分:10)

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

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

该解决方案对数字进行了完全验证,对于浮点数,它不会采用(点)

代码示例

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

答案 1 :(得分:2)

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

$(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
}

答案 2 :(得分:2)

你可以试试这个:

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来避免在无效的情况下显示字符。 正如评论中提到的,我也使用了焦点。 如果最后输入的字符是“。”,我不会解析。因为您将无法输入小数值。

答案 3 :(得分:0)

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

How it behave

答案 4 :(得分:0)

我不确定你想做什么 但是这个呢?

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

答案 5 :(得分: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];
    }
});

答案 6 :(得分:-1)

试试这个:

$("#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(); } 
    });