这个确实让我挠头。
我正在使用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",但是由于您进行了操作(handleBinaryOperation
,handleEqualsOperation
)" currentNumStr
"将为空"
按/-按钮切换
您将获得一个空的显示
如果您跟踪此变量,您会得到答案。
还请记住,e.key
不是跨浏览器兼容的,也许您可以使用e.keyCode
或e.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();