0

シンプルな javascript-html 電卓を実装しようとしています。私がやりたいことは、「.」を 1 つだけ入力することです。ユーザーによって。どうすればこれを制御できますか? これが私が試したコードです。

「。」の数はすでにわかります。しかし、私は今混乱しています。この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)

( と の両方で機能しundefinedますnull)

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 に答える