簡體   English   中英

允許用戶僅單擊一個“。”

[英]Allowing user to click only one “.”

我正在嘗試實現一個簡單的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);    
    }
}

您的(主要)問題是此測試:

if(!replace) 

當replace為""!""true

將測試更改為

if (replace==null)

(它適用於undefinednull

但是我真的不明白為什么您似乎想要定義一個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));
    });

編輯:我應該提到,isNumber()函數還檢查以確認最終結果是一個數字。 如果您願意,也可以發布。

編輯2:修改后的代碼塊以添加isNumber()函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM