2017-09-20 49 views
2

我目前有一个数字输入脚本,其行为与显示数字的计算器类似,但我希望在两个数字之后停止添加附加数字小数点。Javascript限制输入一次达到2位小数

这是我到目前为止,虽然限制不正确发生。

它应该是这样的:

1.25 - 允许

12.5 - 允许

125.5 - 允许

125.55 - 允许

123.555 - 不允许

rText = document.getElementById("resultText"); 

function selectNumber(num) { 
if (!rText.value || rText.value == "0") { 
    rText.value = num; 
} 
else { 

这部分工程...

 rText.value += num; 

    } 
    } 
} 

但这部分不工作...任何想法?

if (rText.value.length - (rText.value.indexOf(".") + 1) > 2) { 

     return false; 
    } else { 
     rText.value += num; 

    } 
    } 
} 

回答

1

var validate = function(e) { 
 
    var t = e.value; 
 
    e.value = (t.indexOf(".") >= 0) ? (t.substr(0, t.indexOf(".")) + t.substr(t.indexOf("."), 3)) : t; 
 
}
<input type="text" id="resultText" oninput="validate(this)" />

+0

工作完美。非常感谢。 – cloudseeker

0

我喜欢用Math.floor和toFixed()来解决我的小数问题。

这里是一个例子:

var value = 123.5555 
var roundedNumber = (Math.floor(value * 100)/100).toFixed(2) 

roundedNumber将 “123.55” 作为字符串。所以,如果你想为一个数字只需添加:

var value = 123.5555 
var roundedNumber = Number((Math.floor(value * 100)/100).toFixed(2)) 

,现在你必须值为数字并固定了小数点后2位。

0

保存一些数据之前的属性值,如果超过2位小数,然后恢复到以前的值用

的2位小数,可以检查Math.round(tis.value*100)/100!=tis.value

注:

我已经使用oninput甚至在验证复制粘贴的情况下

function restrict(tis) { 
 
    var prev = tis.getAttribute("data-prev"); 
 
    prev = (prev != '') ? prev : ''; 
 
    if (Math.round(tis.value*100)/100!=tis.value) 
 
    tis.value=prev; 
 
    tis.setAttribute("data-prev",tis.value) 
 
}
<input type="number" id="rText" oninput="restrict(this);" />

0

只要复制粘贴此方法,并呼吁你们各自的按钮,这种方法在哪一个按钮,你必须检查此十进制验证。

function CheckDecimal(inputtxt) 
    { 
    var decimal= /^[-+]?[0-9]+\.[0-9]+$/; 
    if(inputtxt.value.match(decimal)) 
    { 
    alert('Correct, try another...') 
    return true; 
    } 
    else 
    { 
    alert('Wrong...!') 
    return false; 
    } 
    }