我创建了一个根据用户输入计算出一个总和的表单,这个工作正常,但在输入阶段我得到总数中显示的无穷大属性。无论如何避免这种情况?
我绝不是一个Javascript expecrt所以任何帮助将不胜感激。这是代码。
<div class="wrapper">
<form id="convert">
<input type="text" name="child" onkeyup="formChanged()" onchange="formChanged()"/>
<input type="text" name="parent" onkeyup="formChanged()" onchange="formChanged()"/>
<div id="final"></div>
</form>
<script>
function formChanged() {
var first = document.getElementsByName("child")[0].value;
var second = document.getElementsByName("parent")[0].value;
var third = first / second;
var four = third * 100;
document.getElementById("final").innerHTML = four+"%";
}
</script>
</div><!-- /.wrapper -->
答案 0 :(得分:2)
不要除以零。
iconv -f ISO-8859-1 -t UTF-8 myFile.xyz > myFile.utf8abc
为零时您想要做什么取决于您。但是处理它的最简单的方法可能就是不进行计算而不在second
中写任何内容,除非你有final
的非零值。
此外,您可能还想检查second
。如果有人在任何文本框中写了一个实际上不是数字的东西,那么你的输出中最终会得到NaN
。 (您可以在这里使用NaN%
,也可以将您的值解析结果与isNaN
进行比较。
所以你可以这样做:
NaN
答案 1 :(得分:0)
您首先需要对您的值进行一些验证。您的计算仅对数值有意义,如果您的第二个变量== 0,您必须确保不要尝试计算它。
答案 2 :(得分:0)
我认为这对你有用。
<div class="wrapper">
<form id="convert">
<input type="text" name="child" onkeyup="formChanged()" onchange="formChanged()"/>
<input type="text" name="parent" onkeyup="formChanged()" onchange="formChanged()"/>
<div id="final"></div>
</form>
<script>
function formChanged() {
var first = document.getElementsByName("child")[0].value;
var second = document.getElementsByName("parent")[0].value;
if(second == ""){second=1};
if(first != "" && second != ""){
var third = parseInt(first) / parseInt(second);
var four = parseInt(third) * 100;
document.getElementById("final").innerHTML = four+"%";
}
}
</script>
</div><!-- /.wrapper -->
由于
答案 3 :(得分:0)
在这种情况下,我不会尝试解析/验证输入。做尽可能少,并假设有效输入。
在显示结果之前,只需测试得到有效输出。
function isValidNumber(v){
//!NaN && !Infinity
return v===v && v !== Infinity && v !== -Infinity;
}
//cast the inputs to a valid number
function number(v){
//return +String(v).replace(",", ".");
return +v;
//return +v || 0;
}
function formChanged() {
var first = document.getElementsByName("child")[0].value;
var second = document.getElementsByName("parent")[0].value;
var result = 100 * number(first) / number(second);
document.getElementById("final").innerHTML = isValidNumber(result)?
Math.floor(result) + "%": //I have a valid result
""; //values have changed, but sth. went wrong
}