为什么我的全局变量无法识别?

时间:2017-08-09 15:50:16

标签: javascript matrix

我在函数外部声明了一个3 X 3矩阵作为2D数组,函数本身找到了数组的行列式。单击时,提交按钮将执行行列式功能。但是当我在函数外部声明数组时,它返回NaN。当我在函数中声明它时,它工作正常。 P.S。:这是我的第一个JavaScript程序。          [源代码的相关部分] [1]

    <!DOCTYPE html>
<html>
<body>

<h1> Solving Matrices </h1>
    <form>
      <label for="11"> 1,1 </label>
      <input type="text" name="txt11" id = "11">

      <label for="12"> 1,2 </label>
      <input type="text" name="txt12" id = "12">

      <label for="13"> 1,3 </label>
      <input type="text" name="txt13" id = "13"><br>

      <label for="21"> 2,1 </label>
      <input type="text" name="txt21" id = "21">

      <label for="22"> 2,2 </label>
      <input type="text" name="txt22" id = "22">

      <label for="23"> 2,3 </label>
      <input type="text" name="txt23" id = "23"><br>

      <label for="31"> 3,1 </label>
      <input type="text" name="txt31" id = "31">

      <label for="32"> 3,2 </label>
      <input type="text" name="txt32" id = "32">

      <label for="33"> 3,3 </label>
      <input type="text" name="txt33" id = "33"><br><br>
      <input type="submit" value="submit" onclick = "det3()"><br>
      <p id = "output"> Output here </p>

    </form>

    <script>

   var matrix =
     [
       [parseInt(document.getElementById("11").value), parseInt(document.getElementById("12").value), parseInt(document.getElementById("13").value)],  
   [parseInt(document.getElementById("21").value), parseInt(document.getElementById("22").value), parseInt(document.getElementById("23").value)],    
   [parseInt(document.getElementById("31").value), parseInt(document.getElementById("32").value), parseInt(document.getElementById("33").value)]  ];    

function det3 ()
{


 var det = matrix[0][0]*(matrix[1][1]*matrix[2][2]-matrix[1][2]*matrix[2][1]) - matrix[0][1]*(matrix[1][0]*matrix[2][2]-matrix[1][2]*matrix[2][0]) + matrix[0][2]*(matrix[1][0]*matrix[2][1]-matrix[1][1]*matrix[2][0]);
  alert(det);

}


    </script>

</body>
</html>

1 个答案:

答案 0 :(得分:1)

这是因为如果你将它定义为全局变量,你的脚本会在加载html后立即触发,因此每个元素的值都是NaN,如果你做了一个console.log(document.getElementById(&#34; 11&#34;)。价值)你将看不到任何印刷品。 你只想在单击按钮时获取值,这样最好在函数内部定义矩阵变量,或者如果你真的想让它变成全局的话,可以这样做。

&#13;
&#13;
<script>
console.log(document.getElementById("11").value)
   var matrix =[];
function det3 ()
{
 matrix =[
       [parseInt(document.getElementById("11").value), parseInt(document.getElementById("12").value), parseInt(document.getElementById("13").value)],  
   [parseInt(document.getElementById("21").value), parseInt(document.getElementById("22").value), parseInt(document.getElementById("23").value)],    
   [parseInt(document.getElementById("31").value), parseInt(document.getElementById("32").value), parseInt(document.getElementById("33").value)]  ];  

 var det = matrix[0][0]*(matrix[1][1]*matrix[2][2]-matrix[1][2]*matrix[2][1]) - matrix[0][1]*(matrix[1][0]*matrix[2][2]-matrix[1][2]*matrix[2][0]) + matrix[0][2]*(matrix[1][0]*matrix[2][1]-matrix[1][1]*matrix[2][0]);
  alert(matrix);

}
</script>
&#13;
&#13;
&#13;