允许用户只点击一个“。”

时间:2013-11-06 21:11:30

标签: javascript replace calculator

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

2 个答案:

答案 0 :(得分: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将是点的数量)

答案 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()函数。