允许用户仅单击一个“.”

Allowing user to click only one "."

本文关键字:一个 许用户 用户 单击      更新时间:2023-09-26

我正在尝试实现一个简单的javascript-html计算器。我想做的是,用户只输入一个"."。我该如何控制?这是我尝试过的代码。

我已经可以找到"."的数字,但我现在很困惑,这个 placeAll 函数也没有用空字符串替换"."。

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);    
    }
}

我最近用下面的代码完成了这个。它位于为字段上的每次按键触发的函数中。它可能有点混乱,我相信有更好的方法,但它有效。它还允许某人输入"."(如果他们选择了一个),因为它将替换该选定的一个:

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

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

if(!replace) 

当替换""时,!"" true

将测试更改为

if (replace==null)

(它适用于undefinednull

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

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

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

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

(在此之前你不需要数,i将是点数)