我正在创建“类似Windows”的计算器。我已经用html构建了我的计算器,并将输入设置为只读,以便与Windows的类似。现在,我知道您可以通过创建适当的正则表达式来控制基本输入,但是对于只读,情况是否如此?
我想要的是通过添加事件侦听器来控制输入框中的内容,而不是在满足条件时更新输入(我已经这样做了),但是我是否可以通过使用正则表达式或其他适当的数学算法(如3.55*(4/(1+1))?)技术来进一步限制我的代码我希望我清楚我需要什么。
我试着设置无数的变量,并用if/switch语句控制它们,但它花了我大约100行代码,很快就成了控制的噩梦,所以我从头开始寻找替代方案,如果我了解到的关于JS的东西是真的,这是可能的。请只使用纯JS,不要使用其他库。下面是我当前的JS代码:
const domRef = {
inputMain: document.getElementById('input-main'),
inputSecondary: document.getElementById('input-secondary'),
buttons: document.getElementById('calculator-basic').querySelectorAll('button')
}
function handleClick(event) {
let target = event.target;
if (target.classList.contains('expressions')) { // operands and operators
let input = target.textContent;
updateInputMain(input);
}
}
function handleKeypress(event) {
let target;
for (let i = 0; i < domRef.buttons.length; i++) {
if (domRef.buttons[i].textContent === event.key) {
target = domRef.buttons[i];
target.click();
}
}
}
function updateInputMain(input) {
domRef.inputMain.value += input;
}
for (let i = 0; i < domRef.buttons.length; i++) {
domRef.buttons[i].addEventListener('click', handleClick);
}
document.body.addEventListener('keypress', handleKeypress);
发布于 2018-06-16 04:58:06
我建议使用专用库,例如Math.js
做强大的计算变得如此简单:
math.sqrt(-4); // 2i
console.log(math.eval(3.55*(4/(1+1))));
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/4.4.2/math.min.js"></script>
Math.js包含一个函数math.parse,用于将表达式解析到表达式树中。这应该会很方便。
此外,我们可以使用try-catch块包装parse或eval,以检查语法错误:
try {
math.parse('3.55*(4/(1+1)');
}
catch(error) {
console.error(error);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/4.4.2/math.min.js"></script>
https://stackoverflow.com/questions/50861624
复制相似问题