2017-09-20 409 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; 
    } 
    }