JS程序采取不必要的输入,但仅零星

  • 本文关键字:程序 不必要 JS javascript
  • 更新时间 :
  • 英文 :


这个确实让我挠头。

我正在使用JavaScript作为练习来构建计算器。所述计算器正在启动并在Codepen上运行。在左下方,您会看到一个" - "按钮,该按钮仅采用输入字段的内容,然后逆转其符号(正变为负,负为正。用于计算。简单吗?

实际更改标志的功能如下:

function toggleSign() {
    if(getCurrentDispVal()[0] === "-") {
        currentNumStr = currentNumStr.slice(1, currentNumStr.length);
    } else {
        currentNumStr = "-" + currentNumStr;
    }
    updateDisplay(currentNumStr);
}

仅在一个地方称呼它,该函数从用户中获取输入并决定如何处理:

function useInput(input) {
    if(input.match(/(d|.)/)) {
        handleDigitInput(input);
    } else if(input.match(/(X|/|-|+)/)) {
        handleBinaryOperation(input);
    } else if(input.match(/=/)) {
        handleEqualsOperation();
    } else if(input.match(/^c$/)) {
        clearCurrentNumStr();
    } else if(input.match(/^ac$/)) {
        allClear();
    } else if(input.match(/^shorten$/)) {
        shortenCurrentNumStr(); 
    } else if(input.match(/^plusmin$/)) {
        toggleSign();
    }
}

有时,有时甚至有时会按预期起作用。例如,输入以下内容: 1在键盘上,而不是屏幕 单击" - "按钮 在键盘上 5在键盘上 在键盘上输入

有时会正确运行,结果吐出" 4"。有时,这让我感到困惑,当您击中输入时,它会在" 5"制造"上翻转标志,然后返回" -6"作为答案。发生,在useinput函数中,/=/和/^plusmin $/条件都在触发中。只需直接单击屏幕按钮,就不会发生此问题。

我在这里不知所措。对于发生这种情况的情况似乎没有任何模式,我一遍又一遍地使用相同的输入。我不明白为什么会发生这种情况,以及为什么它不会持续发生。

因此,对于我所看到的,处理" currentNumStr"变量的方式存在问题,请按照此示例找到另一个问题:

按5
按/-按钮切换
按X按钮
按6

"它将显示-30",但是由于您进行了操作(handleBinaryOperationhandleEqualsOperation)" currentNumStr"将为空"
按/-按钮切换
您将获得一个空的显示

如果您跟踪此变量,您会得到答案。

还请记住,e.key不是跨浏览器兼容的,也许您可以使用e.keyCodee.which,因此我遇到了许多未定义的错误。

编辑:举例说明我在评论中添加的内容:

在html中更改以下内容:

<div class="calc-body>

为此,选择您想要的ID(Tabindex是必要的,以便DIV无法获得焦点)

<div class="calc-body" id="forFocusId" tabindex="0">

和JS文件中,添加一个全局var来分配DIV(如果您不想添加变量,则可以在下一步中调用document.getElementById("forFocusId")

var focusElement = document.getElementById("forFocusId");

最终在函数useInput的末尾,添加

focusElement.focus();

最新更新