Javascript 允许用户只单击一个“按钮”&引用;

Javascript 允许用户只单击一个“按钮”&引用;,javascript,replace,calculator,Javascript,Replace,Calculator,我正在尝试实现一个简单的javascript html计算器。我要做的是,用户只需键入一个“.”。我怎样才能控制这一切?这是我试过的代码 我已经可以找到“.”的数目,但是我现在很困惑,这个replaceAll函数没有用空字符串替换“.” String.prototype.replaceAll = function(search, replace) { //if replace is null, return original string otherwise it will //

我正在尝试实现一个简单的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);    
    }
}
String.prototype.replaceAll=函数(搜索、替换)
{
//如果replace为null,则返回原始字符串,否则将返回
//将搜索字符串替换为“未定义”。
如果(!更换)
归还这个;
返回this.replace(新的RegExp('['+search+']','g'),replace);
};
函数计算(){
var值=document.calculator.text.value;
var valueArray=value.split(“”);
var arrayLenght=valueArray.length;
var character=“.”;
var charCount=0;
对于(i=0;i1){
var newValue=value.replaceAll(“.”,“”);
警报(新值);
}
}
您的(主要)问题在于此测试:

if(!replace) 
当替换为
”时!“
真的

将测试更改为

if (replace==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));
    });
EDIT:我应该提到,isNumber()函数还检查最终结果是否为数字。如果你愿意的话,我也可以发布


编辑2:修改代码块以添加isNumber()函数。

谢谢,这修复了replaceAll问题,但我的主要问题是只允许用户使用一个“.”。你是说要从第二个开始替换吗?是的,只允许使用一个“.”。@tartartart是我在答案末尾给出的代码,你在寻找什么?好的,我应该在中调用此函数吗?@Tartar我已更新以添加isNumber()函数。顺便说一句,用户没有在我的计算器上键入键,所有数字都是按钮,因此对我的计算器没有用处。@tartartar啊,好吧,我误解了。您可能会对功能进行一些修改,以便在按下按钮时触发,然后检查相关的按钮值。是的,我很难检查点。我想做的是,当用户单击点按钮时,一个点将写入文本,如果用户单击点按钮,则不会有多个点写入文本。