无法通过JavaScript

时间:2015-11-30 14:12:42

标签: javascript html

我只是尝试从html input字段中获取输入。 问题是,我的函数总是将输入计算为0。 我应该如何处理我的代码(从字段中获取输入并将它们传递给我的javascript函数)。如果之前提出过类似问题,请参阅。

请不要提出jQuery解决方案 - 我不能完全遵循其parantheses语法。

P.S。三元零,只是为了避免NaNs。没有其他的。



<!DOCTYPE html>
<html>

<head>
  <title></title>
</head>

<body>

  <strong>Data</strong>
  <hr>Price:
  <input type="text" id="price" value="0">
  <br>Prepay:
  <input type="text" id="prepay" value="0">
  <br>Percent:
  <input type="text" id="percent" value="0">
  <br>Month:
  <input type="text" id="month" value="0" onchange="refactorTable('payment-plan')">
  <br>

  <hr>
  <strong>Table</strong>

  <table id="payment-plan" border="1">
    <thead>
      <tr>
        <td>Month</td>
        <td>Amount</td>
      </tr>
    </thead>
    <tbody>

    </tbody>
  </table>
  <script type="text/javascript">
    var Sum = parseInt(document.getElementById('price').value);
    var PrePayment = parseInt(document.getElementById('prepay').value);
    var Percent = parseInt(document.getElementById('percent').value);
    var Month = parseInt(document.getElementById('month').value);

     //console.log(Sum +" -- "+ PrePayment +" -- "+ Percent +" -- "+ Month);

    function monthlyPaymentPlan(Sum, PrePayment, Percent, Month) {

      var BigJohn = Sum - PrePayment;
      //console.log(BigJohn);
      var monthly = Math.ceil((BigJohn + BigJohn * Percent) / Month);
      return Month > 0 ? monthly : 0;

    }

    function lastMonth(Sum, PrePayment, Percent, Month) {
      return Month > 0 ? Sum - monthlyPaymentPlan(Sum, PrePayment, Percent, Month) * (Month - 1) : 0;
    }

    function refactorTable(tbl_id) {
      var table = document.getElementById(tbl_id).getElementsByTagName('tbody')[0];
      table.innerHTML = "";
      var i = 0;
      var rows = document.getElementById('month').value;
      rows = parseInt(rows);
      for (i = 0; i < rows - 1; i++) {
        table.insertRow(-1).innerHTML = "<td>" + (i + 1) + "</td><td>" + monthlyPaymentPlan(Sum, PrePayment, Percent, Month) + "</td>";
      }
      table.insertRow(-1).innerHTML = "<td>" + rows + "</td><td>" + lastMonth(Sum, PrePayment, Percent, Month) + "</td>";
    }
  </script>


</body>

</html>
&#13;
&#13;
&#13;

4 个答案:

答案 0 :(得分:3)

您在页面呈现时获取值,而不是在函数运行时获取值。将您的作业放在一个函数中并调用该函数。

// Define the variables globally so they can be used in any function
var Sum;
var PrePayment;
var Percent;
var Month;

// Call this function to set the values of the global variables.
function getValues() {
    Sum        = parseInt(document.getElementById('price').value);
    PrePayment = parseInt(document.getElementById('prepay').value);
    Percent    = parseInt(document.getElementById('percent').value);
    Month      = parseInt(document.getElementById('month').value);
}

// Call the getValues function first to set the values and then continue on 
// with your function calculations.
function refactorTable(tbl_id) {
   getValues();
   // Do the rest...
}

答案 1 :(得分:2)

您需要在调用函数时获取值。现在你正在获取页面加载的值(即0)。

function refactorTable(tbl_id) {
    var Sum        = parseInt(document.getElementById('price').value);
    var PrePayment = parseInt(document.getElementById('prepay').value);
    var Percent    = parseInt(document.getElementById('percent').value);
    var Month      = parseInt(document.getElementById('month').value);

    var table = document.getElementById(tbl_id).getElementsByTagName('tbody')[0];
    table.innerHTML = "";
    var i=0;
    var rows = document.getElementById('month').value;
    rows = parseInt(rows);
    for(i=0; i<rows-1; i++) {
        table.insertRow(-1).innerHTML = "<td>" + (i+1) + "</td><td>" + monthlyPaymentPlan(Sum, PrePayment, Percent, Month) + "</td>";
    } 
    table.insertRow(-1).innerHTML = "<td>" + rows + "</td><td>" + lastMonth(Sum, PrePayment, Percent, Month) + "</td>";
}

答案 2 :(得分:2)

您需要在更改id =“month”时更新输入变量值,以便获取更新值。

var Sum = '';
var PrePayment = '';
var Percent = '';
var Month = '';
function inputsval() {
   Sum = parseInt(document.getElementById('price').value);
   PrePayment = parseInt(document.getElementById('prepay').value);
   Percent = parseInt(document.getElementById('percent').value);
   Month = parseInt(document.getElementById('month').value);
}
function refactorTable(tbl_id) {
   inputsval();
   //Your other code.....
}

答案 3 :(得分:1)

var Sum        = parseInt(document.getElementById('price').value);

这不是定义函数或宏。这是对一个数字的一​​次性计算,看起来这将在页面启动时发生。因此,它不会从第一个值(0)改变。

您应该在refactorTable内移动这些声明。值得庆幸的是,您已将它们设置为作为参数传递。