javascript - 尝试返回特定于 DOM 输入的函数
问题描述
我一直在挑战自己创建一个函数,使全局变量环境尽可能不受污染,经过大量“突破”(这对我来说是一个新的和具有挑战性的话题)我觉得我已经碰壁了,开始了被烧毁。
我目前的目标是formMaths(formula)
获取一个代表 HTML 输入multiply
或divide
值的参数,根据条件检查它,然后返回适当的高阶函数和回调。
好消息是我能够让公式起作用。坏消息是它只返回函数第一个条件的输出。我已经尝试在属性中为 formMaths 设置参数onClick
,插入 DOM 相关命令等......到目前为止还没有运气。
达到这一点是一段旅程,我尝试了几种不同的方法,但它们似乎都不足。我觉得我快到了,但我已经有一段时间了。我很想看看完成这个功能需要什么以及可以对代码进行的任何改进。
谢谢!
<body>
<form>
1st Number: <input type="text" id="firstNum"></br>
2nd Number: <input type="text" id="secondNum"></br>
<input type="button" value="multiply" onClick="formMaths()">
<input type="button" value="divide" onClick="formMaths()">
<p>The result is: <span id="result"></span></p>
</form>
</body>
<script>
function formMaths(formula) {
let multiAB = (a,b) => {
return a * b;
}
let divideAB = (a,b) => {
return (a / b);
}
function doMaths(callback) {
let firstNum = parseFloat(document.getElementById("firstNum").value);
let secondNum = parseFloat(document.getElementById("secondNum").value);
document.getElementById("result").innerHTML = callback(firstNum, secondNum);
}
if (formula = 'multiply') return doMaths(multiAB);
else if (formula = 'divide') return doMaths(divideAB);
}
</script>
解决方案
只需在您的formMaths()
调用中添加一个参数,如下所示:
onclick="formMaths(this.id)"
因为这里this
对应于单击的按钮和按钮id
的 ID ( multiply
/ divide
),所以这将对您有利并formula
起作用:
function formMaths(formula) {
let multiAB = (a, b) => {
return a * b;
}
let divideAB = (a, b) => {
return a / b;
}
function doMaths(callback) {
let firstNum = parseFloat(document.getElementById("firstNum").value);
let secondNum = parseFloat(document.getElementById("secondNum").value);
document.getElementById("result").innerHTML = callback(firstNum, secondNum);
}
if (formula == 'multiply') return doMaths(multiAB);
else if (formula == 'divide') return doMaths(divideAB);
}
<body>
<form>
1st Number: <input type="text" id="firstNum"><br>
2nd Number: <input type="text" id="secondNum"><br>
<input type="button" value="multiply" id="multiply" onclick="formMaths(this.id)">
<input type="button" value="divide" id="divide" onclick="formMaths(this.id)">
<p>The result is: <span id="result"></span></p>
</form>
</body>
我修复的第二件事是在你的if
陈述中——你只使用了 1 个等号。formula
自从您设置为 后,这使您的数学每次都成倍增加multiply
,而不是对其进行测试。我将其更改为 2 个等号,现在它可以工作了。
推荐阅读
- c# - 如何在 FirstChanceException 的日志记录中包含实际的表单类名?
- python - Py4j 无法连接到 Java 服务器
- wordpress - WordPress 页面:为什么是
被包裹的标签 尽管
不是? - laravel - 在 docker 中构建流明
- html - SASS -scss 背景图片链接
- python - 在 sklearn 网格搜索中获得不同的缩放比例
- java - 来自库/基础的 Android 覆盖文件
- javascript - 需要找出哪些输出节点名称需要传递给 Tensorflowjs 转换器
- python - docker通过python docker SDK登录到ECR
- c# - 按下选项卡时提交 WPF 数据网格行