javascript - 初级 JS 练习:Change Maker
问题描述
我正在学习 JavaScript,并且在练习中遇到了障碍。我正在尝试制作一个 change maker 应用程序,但不知道如何成功添加if
/else
语句。我希望有人能给我一些指导。我一切正常,但是当我尝试添加将输入限制为 0-99 的if
/else
语句时,它会中断。我收到一个错误,说cents
未定义。是我的位置吗?代码错了吗?任何帮助将不胜感激!
var $ = function(id) {
return document.getElementById(id);
};
var $ = function(id) {
return document.getElementById(id);
};
var processEntry = function() {
var entry = $("cents").value; // get user entry
var cents = parseInt(entry); // parse entry
makeChange(cents);
$("cents").focus();
};
if (!isNaN(cents) || cents < 100 || cents > 0) {
var makeChange = function(cents) {
var quarters = parseInt(cents / 25); // get number of quarters
var dimes = parseInt(((cents - (quarters * 25)) / 10)); // get number of dimes
var nickels = parseInt(((cents - (quarters * 25)) - (dimes * 10)) / 5); // get number of nickels
var pennies = parseInt(((cents - (quarters * 25)) - (dimes * 10)) - (nickels * 5)); // get number of pennies
// display the results of the calculations
$("quarters").value = quarters;
$("dimes").value = dimes;
$("nickels").value = nickels;
$("pennies").value = pennies;
};
} else {
alert("Please enter a number between 0-99")
}
window.onload = function() {
$("calculate").onclick = processEntry;
$("cents").focus();
};
body {
font-family: Arial, Helvetica, sans-serif;
background-color: white;
margin: 0 auto;
width: 600px;
border: 3px solid blue;
}
h1 {
color: blue;
margin-top: 0;
}
main {
padding: 1em 2em;
}
label {
float: left;
width: 16em;
text-align: right;
}
input {
margin-left: 1em;
margin-bottom: .5em;
}
<main>
<h1>Change Calculator</h1>
<label>Enter amount of change due (0-99):</label>
<input type="text" id="cents" />
<input type="button" value="Calculate" name="calculate" id="calculate" /><br><br>
<label>Quarters:</label>
<input type="text" id="quarters" disabled><br>
<label>Dimes:</label>
<input type="text" id="dimes" disabled><br>
<label>Nickels:</label>
<input type="text" id="nickels" disabled><br>
<label>Pennies:</label>
<input type="text" id="pennies" disabled><br>
</main>
非常感谢!
解决方案
您引用的点,cents
尚未定义。
由于您刚刚开始编程,因此您应该知道,函数中定义的语句在函数运行之前没有任何影响。在您的情况下,cents =
... 语句尚未运行,因为在您的语句引用processEntry
时该函数尚未执行,因此您收到错误消息。if
cents
即使您processEntry
首先调用,它也不会像所写的那样工作,因为cents
它被声明为函数的本地。它必须是全局的(总是一个坏主意),否则应该返回该值以供函数调用者使用。
在结尾之前添加以下内容processEntry
:
return cents;
然后,您可以在if
语句之前简单地添加以下内容:
var cents = processEntry();
呵呵……现在,仔细看,看来你应该把整个if
……有条件地移到 inside processEntry
。然后我说的,上面不需要做,代码会做你所期望的!
推荐阅读
- python - 如果另一列中的字符串匹配,则取列值的平均值
- laravel - laravel 框架刀片文件中的 {{-- --}} 和 {{ }} 有什么区别?
- php - 在内部加载皮肤 CSS,而不是在 wordpress 上的 HTML 头中的链接
- python - 解析键中的嵌套 JSON 数据
- php - JSON 中位置 0 的意外令牌 A - 使用 POST 方法时出现问题
- ios - 为什么不应该直接调用收据验证端点
- ansible - Ansible替换文件中的文本
- bash - bash 中的 `echo_summary` 函数是什么?
- ruby - 在早期 Ruby 版本中冻结字符串文字
- r - 在 R 中执行每一行代码后,如何使特定函数运行?