如何在输入期间停止显示无限

时间:2016-03-14 15:01:25

标签: javascript

我创建了一个根据用户输入计算出一个总和的表单,这个工作正常,但在输入阶段我得到总数中显示的无穷大属性。无论如何避免这种情况?

我绝不是一个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 -->

4 个答案:

答案 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 
}