gpt4 book ai didi

javascript - 显示结果后计算器显示值重置

转载 作者:行者123 更新时间:2023-12-02 21:32:28 24 4
gpt4 key购买 nike

为了练习,我使用 JS 构建了一个简单的计算器。但是,我无法实现以下目标:

  1. 计算器显示结果后,当我单击按键输入新值时,新值会继续与结果连接。如何重置显示值?

  2. 如何限制输入多个小数点。

源代码:

const calculator = document.querySelector(".calculator");
const displayScreen = document.querySelector(".calculatorDisplay");
const numberKeys = document.querySelectorAll(".numKeys");
const operatorKeys = document.querySelectorAll(".operator");
const equalsButton = document.querySelector(".equals");
const allClear = document.querySelector(".allClear");
const decimalButton = document.querySelector(".decimalButton");

// variables
var firstOperand;
var secondOperand;
var operator;

for(var i=0; i<numberKeys.length; i++){
numberKeys[i].addEventListener("click", e=>{
const firstValue = e.target.textContent;
displayScreen.value+= firstValue;
});
}

for(var i=0; i<operatorKeys.length; i++){
operatorKeys[i].addEventListener("click", e=>{
firstOperand = displayScreen.value;
displayScreen.value = "";
operator = e.target.textContent;
});
}

equalsButton.addEventListener("click", function(){
secondOperand = displayScreen.value;
displayScreen.value = mathOperations();
});


allClear.addEventListener("click", function(){
displayScreen.value ="";
});

decimalButton.addEventListener("click", e=>{
displayScreen.value=displayScreen.value + "."
});


function mathOperations(){
let operandOne = parseFloat(firstOperand);
let operandTwo = parseFloat(secondOperand);
if(operator==="+"){
return (operandOne + operandTwo);
}

if(operator==="-"){
return (operandOne - operandTwo);
}

if(operator==="*"){
return (operandOne * operandTwo);
}

if(operator==="/"){
return (operandOne / operandTwo);
}
}

最佳答案

  1. 您需要将 currentValue 声明为全局变量(例如在 operator 旁边)。然后,当用户单击 equalsButton 时,您将 currentValue 设置为 true。然后,在 numberKeys 处理程序中,添加检查 currentValue 是否为 true,并清除 displayScreen
numberKeys[i].addEventListener("click", e => {
if (currentValue) {
displayScreen.value = '';
currentValue = false;
}
displayScreen.value += e.target.textContent;
});
  • 我错误地认为 displayScreen 是一个字符串,但它是输入,所以检查应该是 displayScreen.value.length
  • if (displayScreen.value.charAt(displayScreen.value.length - 1) !== '.') {

    const calculator = document.querySelector(".calculator");
    const displayScreen = document.querySelector(".calculatorDisplay");
    const numberKeys = document.querySelectorAll(".numKeys");
    const operatorKeys = document.querySelectorAll(".operator");
    const equalsButton = document.querySelector(".equals");
    const allClear = document.querySelector(".allClear");
    const decimalButton = document.querySelector(".decimalButton");

    let firstOperand;
    let secondOperand;
    let operator;
    let currentValue = false;


    enterNumbers();

    for (var i = 0; i < operatorKeys.length; i++) {
    operatorKeys[i].addEventListener("click", e => {
    firstOperand = displayScreen.value;
    displayScreen.value = "";
    operator = e.target.textContent;
    });
    }

    decimalButton.addEventListener("click", e => {
    if (displayScreen.value.charAt(displayScreen.value.length - 1) !== '.') {
    displayScreen.value=displayScreen.value + ".";
    }
    });

    equalsButton.addEventListener("click", function() {
    currentValue = true;
    secondOperand = displayScreen.value;
    displayScreen.value = mathOperations();
    });

    allClear.addEventListener("click", function() {
    displayScreen.value = "";
    });

    function mathOperations() {
    let operandOne = parseFloat(firstOperand);
    let operandTwo = parseFloat(secondOperand);
    if (operator === "+") {
    return operandOne + operandTwo;
    }

    if (operator === "-") {
    return operandOne - operandTwo;
    }

    if (operator === "*") {
    return operandOne * operandTwo;
    }

    if (operator === "/") {
    return operandOne / operandTwo;
    }
    }

    function enterNumbers() {
    for (var i = 0; i < numberKeys.length; i++) {
    numberKeys[i].addEventListener("click", e => {
    if (currentValue) {
    displayScreen.value = '';
    currentValue = false;
    }
    displayScreen.value += e.target.textContent;
    });
    }
    }
    /* Code from freshman.tech by Ayooluwa Isaiah */

    html {
    font-size: 62.5%;
    box-sizing: border-box;
    }

    h1 {
    text-align: center;
    }

    *,
    *::before,
    *::after {
    margin: 0;
    padding: 0;
    box-sizing: inherit;
    }

    .calculator {
    border: 1px solid black;
    border-radius: 25px;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 400px;
    }

    .calculatorDisplay {
    text-align: right;
    font-size: 5rem;
    width: 100%;
    height: 80px;
    border: none;
    background-color: #252525;
    color: #fff;
    text-align: right;
    padding-right: 20px;
    padding-left: 10px;
    }
    button {
    height: 60px;
    border-radius: 3px;
    border: 1px solid #c4c4c4;
    background-color: transparent;
    font-size: 2rem;
    color: #333;
    background-image: linear-gradient(
    to bottom,
    transparent,
    transparent 50%,
    rgba(0, 0, 0, 0.04)
    );
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.05),
    inset 0 1px 0 0 rgba(255, 255, 255, 0.45),
    inset 0 -1px 0 0 rgba(255, 255, 255, 0.15),
    0 1px 0 0 rgba(255, 255, 255, 0.15);
    text-shadow: 0 1px rgba(255, 255, 255, 0.4);
    }

    button:hover {
    background-color: #eaeaea;
    }

    .operator {
    color: #337cac;
    }

    .allClear {
    background-color: #f0595f;
    border-color: #b0353a;
    color: #fff;
    }

    .allClear:hover {
    background-color: #f17377;
    }

    .equals {
    background-color: #2e86c0;
    border-color: #337cac;
    color: #fff;
    height: 100%;
    grid-area: 2 / 4 / 6 / 5;
    }

    .equals:hover {
    background-color: #4e9ed4;
    }

    .calculatorKeys {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr 1fr;
    grid-gap: 20px;
    padding: 20px;
    }
    <!DOCTYPE html>
    <html>

    <head>
    <title>Calculator</title>
    <meta charset="utf-8">
    <link rel="stylesheet" type="text/css" href="style.css">
    </head>

    <body>
    <h1>My Calculator</h1>
    <div class="calculator">
    <input type="text" name="display" class="calculatorDisplay">
    <div class=calculatorKeys>
    <!-- operators -->
    <button class="operator">+</button>
    <button class="operator">-</button>
    <button class="operator">*</button>
    <button class="operator">/</button>

    <button class="numKeys">7</button>
    <button class="numKeys">8</button>
    <button class="numKeys">9</button>

    <button class="numKeys">4</button>
    <button class="numKeys">5</button>
    <button class="numKeys">6</button>

    <button class="numKeys">1</button>
    <button class="numKeys">2</button>
    <button class="numKeys">3</button>

    <button class="numKeys">0</button>
    <!-- decimal-->
    <button class="decimalButton">.</button>

    <!-- All clear -->
    <button class="allClear">AC</button>

    <!-- result -->
    <button class="equals">=</button>
    </div>
    <script type="text/javascript" src="cal.js"></script>
    </div>
    </body>

    </html>

    https://codepen.io/moshfeu/pen/RwPQKJV?editors=1000

    关于javascript - 显示结果后计算器显示值重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60586970/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com