客户端 Javascript 按钮不起作用?

Client Side Javascript Button Not Working?

我正在尝试在用户输入值并点击计算时计算函数的真因数。我能够让结果显示在 HTML 一侧,但是该函数不会计算适当的除数,而是仅采用 "sum" 的值。我做错了什么?

function sumOfProperDivisors() {
  return sum;
}

var input = document.getElementById("input").value;
var sum = 0;

{
  for (i = 1; i <= input; i++)
    if (input % i == 0)
      sum = sum + i;
}

function display() {

  document.querySelector("div").innerHTML = "<b> Sum = " + sumOfProperDivisors();

}
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Sum of Prop. Div.</title>
  <h2> Sum of Proper Divisors </h2>
</head>

<body style="background-color:teal;">

  <p> Enter a Positive Integer (N): </p>
  <input type="number" id="input">

  <p><button onclick="display()">Calculate the Sum of Divisors</button></p>

  <div></div>

  <script src="sumOfPDivs.js"></script>

</body>

</html>

将你的计算逻辑移动到 sumOfProperDivisors() 函数中,如下所示:-

function sumOfProperDivisors() {
  var input = document.getElementById("input").value;
  var sum = 0;
  for (i=1; i<=input; i++){
    if (input%i==0){
      sum = sum + i;
    }
  }
  return sum;
}

function display(){
  document.querySelector("div").innerHTML = "<b> Sum = " + sumOfProperDivisors();
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Sum of Prop. Div.</title>
<h2> Sum of Proper Divisors </h2>
</head>
<body style="background-color:teal;">

<p> Enter a Positive Integer (N): </p>
<input type="number" id="input">

<p><button onclick="display()">Calculate the Sum of Divisors</button></p>

<div></div>

<script src="sumOfPDivs.js"></script>

</body>
</html>

注意:- 因为逻辑在函数之外所以实际上它根本不起作用

你的函数 sumOfProperDivisors() 应该是这样的:

    function sumOfProperDivisors(){
     var input = document.getElementById("input").value;
     var sum = 0;
     {
        for (i=1; i<=input; i++)
        if (input%i==0)
        sum = sum + i;
        return sum; 
    }

由于你计算和的算法在函数之外,所以它根本不起作用。

当你的页面加载时,你的文本框将没有值,页面加载时会计算sum,因为计算sum的代码在任何函数之外,所以最好把代码放在在函数 sumOfProperDivisors 中,以便它在每次单击时从文本框中获取值,然后计算总和。