[英]Allowing user to click only one “.”
我正在嘗試實現一個簡單的javascript-html計算器。 我想做的是只鍵入一個'。 由用戶。 我該如何控制? 這是我嘗試過的代碼。
我已經可以找到數字了。 但是我現在也很困惑,這個replaceAll函數不能代替'。'。 與空字符串。
String.prototype.replaceAll = function(search, replace)
{
//if replace is null, return original string otherwise it will
//replace search string with 'undefined'.
if(!replace)
return this;
return this.replace(new RegExp('[' + search + ']', 'g'), replace);
};
function calculate(){
var value = document.calculator.text.value;
var valueArray = value.split("");
var arrayLenght = valueArray.length;
var character = ".";
var charCount = 0;
for(i=0;i<arrayLenght;i++){
if (valueArray[i]===character) {
charCount += 1;
}
}
if(charCount>1){
var newValue=value.replaceAll(".","");
alert(newValue);
}
}
您的(主要)問題是此測試:
if(!replace)
當replace為""
, !""
為true
。
將測試更改為
if (replace==null)
(它適用於undefined
和null
)
但是我真的不明白為什么您似乎想要定義一個replaceAll
函數
var newValue=value.replace(/\./g,"");
編輯:如果您要替換所有的點,第一個可以分開
var i=0, newValue=value.replace(/\./g, function(){ return i++ ? "," : "." });
(您無需在此之前進行計數,而i
將是點的計數)
我最近通過以下代碼完成了此任務。 該功能是針對該字段上的每次按鍵觸發的。 可能有點混亂,我敢肯定有更好的方法,但是可以。 它還允許某人輸入“。” 如果他們選擇了一項,因為它將替換所選的一項:
// Function to verify number
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
// Function called (below) to get text if it is selected
function getSelectionText() {
var text = "";
if (window.getSelection) {
text = window.getSelection().toString();
} else if (document.selection && document.selection.type != "Control") {
text = document.selection.createRange().text;
}
return text;
}
// jQuery function on keypress for the textbox
$(".textbox").on("keypress", function (e) {
var fieldVal = $(this).val();
if (e.keyCode == 9) return true; // tab
var keyPressed = String.fromCharCode(e.keyCode);
if (keyPressed == "." && ((fieldVal.indexOf(".") == -1) || getSelectionText().indexOf(".") > 0)) return true; // decimal places, only allow one
return (isNumber(keyPressed));
});
編輯:我應該提到,isNumber()函數還檢查以確認最終結果是一個數字。 如果您願意,也可以發布。
編輯2:修改后的代碼塊以添加isNumber()函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.