我正在尝试实现一个简单的javascript-html计算器。我想要做的是,只键入一个'。'由用户。我怎么能控制这个?这是我试过的代码。
我已经可以找到'。'的数量了。但我现在也很困惑,这个替换所有的功能都没有取代'。'用空字符串。
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);
}
}
答案 0 :(得分:0)
你的(主要)问题是这个测试:
if(!replace)
当替换为""
时,!""
为true
。
将测试更改为
if (replace==null)
(适用于undefined
和null
)
但我真的不明白为什么你需要在你想要的时候定义一个replaceAll
函数
var newValue=value.replace(/\./g,"");
编辑:如果你想要的是将所有点分开,你可以做的第一个点
var i=0, newValue=value.replace(/\./g, function(){ return i++ ? "," : "." });
(在此之前你不需要计算,i
将是点的数量)
答案 1 :(得分:0)
我最近使用以下代码完成了此操作。这位于为场上的每个按键触发的功能中。它可能有点凌乱,我确信有更好的方法,但它确实有效。它还允许某人输入“。”如果他们选择了一个,因为它将替换所选择的一个:
// 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()函数。