在下列情况下,为什么我不能在输入中输入十进制值

时间:2012-10-01 11:44:17

标签: javascript jquery

在你需要看到效果之前:

jsFiddle

正如您所看到的,它是一个计算器,您可以在任何地方放置一个值并将其转换为其他值,但问题是我无法输入十进制int值,如0.3或0.999。造成这种情况的原因是什么?

var id = {
    mm: 1,
    cm: 10,
    m: 1000,
    km: 1000000
};

$('input.bx').on('keyup', function() {

    var t = $(this).val();
    var i = id[$(this).attr("id")];
    var v = parseInt(t, 10);

    for (pp in id) {

        if (t !== '') {
            $("#" + pp).val(v / id[pp] * i);
        } else {
            $(".bx").val('');
        }

    }

});

<input type='text' class='bx' id='mm'> Milimeter<br>
<input type='text' class='bx' id='cm'> Centimeter<br>
<input type='text' class='bx' id='m'> Meter<br>
<input type='text' class='bx' id='km'> Kilometer<br> 

5 个答案:

答案 0 :(得分:3)

parseInt是“问题”,因为它返回整数 - 十进制值不是整数而是浮点数。如果您愿意,必须将其替换为parseFloat

答案 1 :(得分:2)

1.首先你需要使用 parseFloat 因为int cant有小数。 2.其次我会使用 onChange http://jsfiddle.net/Kfkjy/10/

答案 2 :(得分:1)

这个例子工作正常

http://jsfiddle.net/Mohamed_aboelenen/D6T7j/1/

$('input.bx').on('keyup', function() {

var t = $(this).val();
var i = id[$(this).attr("id")];
var v = parseFloat(t, 10);
var a = $(this).attr("id"); // the textbox you write in
for (pp in id) {
    if (t !== '' ) {
        if(a != pp){  // make changes to any textbox except the one you write in
        $("#" + pp).val(v / id[pp] * i);
        }
    } else {
        $(".bx").val('');
    }

}


});

答案 3 :(得分:1)

工作小提琴here

你必须使用parseFloat并且不要尝试设置当前的聚焦元素值,因为你在打字时过度使用它。

答案 4 :(得分:0)

$('input.bx').on('blur', function() {

    var t = $(this).val();
    var i = id[$(this).attr("id")];
    var v = Number(t, 10);

    for (pp in id) {

        if (t !== '') {
            $("#" + pp).val(parseFloat(v / id[pp] * i));
        } else {
            $(".bx").val('');
        }

    }

});