0

我正在尝试实现一个简单的 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);    
    }
}
4

2 回答 2

0

您的(主要)问题是这个测试:

if(!replace) 

当替换是""!""true

将测试更改为

if (replace==null)

(它适用于undefinednull

但我真的不明白为什么你需要replaceAll在你想要的时候定义一个函数

var newValue=value.replace(/\./g,"");

编辑:如果你想要的是将所有点替换为第一个点,你可以做

var i=0, newValue=value.replace(/\./g, function(){ return i++ ? "," : "." });

(在此之前您不需要数,并且i将是点数)

于 2013-11-06T21:13:43.320 回答
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() 函数。

于 2013-11-06T21:36:04.083 回答