【问题标题】:Store two user number inputs in variables, validate as numbers, and write total sum of the two digits将两个用户号码输入存储在变量中,验证为数字,并写入两位数的总和
【发布时间】:2021-06-10 21:30:09
【问题描述】:

我有一个用 html 创建的表单,有两个输入字段和一个按钮。单击按钮时,我希望调用一个函数,然后将两个数字相加,然后通过警报功能显示总和。

我知道如何在单击按钮时调用该函数,并且我知道如何读取两个输入并将其存储在单独的变量中。

我想要一些关于如何以最简单的方式将输入验证为仅数字的提示?

function Calculate() {
  var num1 = document.getElementById("num1").value;

  var num2 = document.getElementById("num2").value;
  num1_parsed = parseInt(num1);    

  num2_parsed = parseInt(num2);

  if (num1_parsed) {    

  } else {
    alert("Wrong input!!!");
    return false;    
  }

  var total = num1_parsed + num2_parsed;
  alert("The total sum of your numbers are: " + sum);
}

此代码出于某种原因有效,如果 num1 正确但 num2 不正确,它会给出消息 NaN 而不是警报消息!

【问题讨论】:

    标签: javascript html css


    【解决方案1】:

    JavaScript 方法

    通过 JavaScript 进行验证,您可以使用 isNaN() 函数。如果输入不是数字,这将返回 true。

    function Calculate() 
    {
      var num1 = document.getElementById("num1").value;
      var num2 = document.getElementById("num2").value;
    
      num1_parsed = parseFloat(num1);    
      num2_parsed = parseFloat(num2);
    
      if(isNaN(num1_parsed) || isNaN(num2_parsed))
      {
          alert("Wrong input!!!");
          return false;
      } else {
          var total= num1_parsed + num2_parsed;
          alert("The total sum of your numbers are: " + total);
          return true;
      }
    }
    

    HTML5 方法

    此外,如果您只想使用 HTML5 来确保输入值是数字,那么您可以对输入标签使用 type="number" 属性。这会添加内置验证以拒绝非数字。

    <input type="number" id="num1" />
    <input type="number" id="num2" />
    

    【讨论】:

    • 我怀疑正确实施 javascript 验证是这里的实际课程目标。
    • 仍然必须将值转换为数字。 type="number" 仍然返回字符串值
    【解决方案2】:

    如果您可以将输入元素用作type="number"

    num1_parsed = Number(num1);
    num2_parsed = Number(num2);
    
    if (isNaN(num1_parsed) || isNaN(num2_parsed) ) {
        alert("Wrong input!!!");
        return false;
    } else {
        // do stuff
        return true;        
    }
    

    【讨论】:

    • 你有相反的逻辑isNaN如果值不是数字则返回true
    • @ZohirSalak 哎呀!
    【解决方案3】:

    使用 isNaN() 函数。使用 || 可能更具可读性而不是 && 这将意味着结果将是错误的。

    function Calculate() {
    
      var num1 = document.getElementById("num1").value;
      var num2 = document.getElementById("num2").value;
      
      num1_parsed = parseInt(num1);    
      num2_parsed = parseInt(num2);
      
      
     //console.log((!(isNaN(num1_parsed))).toString() + " " + num1_parsed);
     //console.log((!(isNaN(num2_parsed))).toString() +  " " + num2_parsed);
    
      if (!(isNaN(num1_parsed)) && !(isNaN(num2_parsed))){
      var total = num1_parsed + num2_parsed;
      alert("The total sum of your numbers are: " + total);
      
      } else {
    alert("Wrong input!!!");
        return false;        
      }
    
    
    }
    <input id="num1" />
    <input id="num2" />
    <button onclick="Calculate()">Calculate</button>

    【讨论】:

      【解决方案4】:

      HTML

      <input type="number" id="num1" />
      <input type="number" id="num2" />
      <button onClick="Calculate()" type="button">Get Sum</button>
      

      JS

      function Calculate() {
        var num1 = document.getElementById("num1").value;
      
        var num2 = document.getElementById("num2").value;
        num1_parsed = parseFloat(num1);    
      
        num2_parsed = parseFloat(num2);
      
        if (isNaN(num1_parsed) || isNaN(num2_parsed) ) {    
           alert("Wrong input!!!");
           return false;    
        }
      
        var total = num1_parsed + num2_parsed;
        alert("The total sum of your numbers are: " + total);
      }
      

      function Calculate() {
        var num1 = document.getElementById("num1").value;
      
        var num2 = document.getElementById("num2").value;
        if( !num1 || !num2 ){
           alert("please enter values for num1 and num2");
        } 
        var total = eval(`${num1}+${num2}`);
        if( isNaN(total) ){
           alert("Wrong input!!!");
           return false;    
        }
        alert("The total sum of your numbers are: " + total);
      }
      

      【讨论】:

      • 是的,如果 num1 或 num2 为空怎么办? also
      • 如果任何 num 为空,则 parseFloat 将返回“NaN”对象
      • 如果其中一个值为空,则 eval 将返回另一个
      • 为此您可以在 eval 之前添加检查
      【解决方案5】:

      解决方案:

      您可以将mapNumber 结合使用来执行初始转换。之后使用reduce 可以给你total。然后您只需检查任何numbers 是否等于NaN


      代码:

        let num = (n) => document.getElementById("num" + n).value,
          total = (numbers = [num(1), num(2)].map(Number)).reduce((a, v) => a + v);
      
        if (numbers.some(Number.isNaN)) alert("wrong");
        else alert("The total sum of your numbers are: " + total);
      

      注意:重要的是要意识到isNaNNumber.isNaN不同的,有时会给出不同的结果。 Number.isNaN 专门查看一个值是否为number,以及该number type 是否为NaNisNaN 将强制提供的 value。 A.e. isNaN(undefined)Number.isNaN(undefined) 分别返回 truefalse


      演示:

      function Calculate() {
        let num = (n) => document.getElementById("num" + n).value,
          total = (numbers = [num(1), num(2)].map(Number)).reduce((a, v) => a + v);
      
        if (numbers.some(Number.isNaN)) alert("wrong");
        else alert("The total sum of your numbers are: " + total);
      
      
      }
      
      document.querySelector("button").addEventListener("click", Calculate);
      <input id="num1" value="34" />
      <input id="num2" value="100" />
      <hr/>
      <button>Calculate</button>

      【讨论】:

        【解决方案6】:

        从用户那里输入两个数字。将其存储在变量中并打印 两个数的和和乘积。

        【讨论】:

        • 这个问题看起来更像是一项学术工作,而不是技术问题。我们很乐意为您提供帮助。为了提高您获得答案的机会,以下是一些提示:stackoverflow.com/help/how-to-ask
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-09
        • 1970-01-01
        • 2017-04-19
        • 1970-01-01
        • 1970-01-01
        • 2016-12-17
        • 1970-01-01
        相关资源
        最近更新 更多