【问题标题】:Accessing a value from outside a function: js and php generated value从函数外部访问值:js 和 php 生成的值
【发布时间】:2018-10-30 05:15:38
【问题描述】:

大家好,stackoverflow 用户, 我一次又一次地尝试从函数外部访问变量。 所以我知道一个变量通常不能从函数外部访问,但是首先在函数外部声明它或返回变量应该给我访问权限,但我无法获得它。 这是我的代码:

<select class='select-style' onchange="selectModel(this)">
  <option></option>
   <?php
    $select_cassetta_name = "select * from cassetta order by cassetta_name ASC";
    $run_cassetta = mysqli_query($con, $select_cassetta_name);
     while($row=mysqli_fetch_array($run_cassetta)){
      $cassetta_id = $row['cassetta_id'];
      $cassetta_name = $row['cassetta_name'];
      $cassetta_price = $row['cassetta_price'];
      echo "<option value='$cassetta_price'>$cassetta_name</option>";
     }
   ?> 
</select>


<div>
  <p id="box"></p>
</div>

<div>
  Sides SUM = <span id="sides_sum"></span> <br>
  Value x Sides = <span id="final_price"></span>
</div>



<script>

  var x;
  var y;
  var z;
  var sum;

  function getSides() {
    var x = parseFloat(document.getElementById("side1").value);
    var y = parseFloat(document.getElementById("side2").value);
    var sum = document.getElementById("sides_sum").innerHTML = x + y;
  }

  function selectModel(selectObject) {
    var z = parseFloat(selectObject.value);
    var cassetta = document.getElementById("box").innerHTML = "You selected value: " + z;
    document.getElementById("final_price").innerHTML = z * sum;
  }

</script>

【问题讨论】:

  • 当您使用关键字var 时,它会在当前范围内创建一个新变量。通过在函数中执行var x,您并没有使用全局函数。您正在创建一个新的局部变量。只需删除函数内部的var 即可使用全局函数。

标签: javascript php html function select


【解决方案1】:

不要在函数内部使用 var 声明 x、y 和 sum。通过使用 var 声明它,您将覆盖全局变量并创建一个局部变量。所以你无法在其他函数中访问它的值

function getSides() {
    x = parseFloat(document.getElementById("side1").value);
    y = parseFloat(document.getElementById("side2").value);
    sum = document.getElementById("sides_sum").innerHTML = x + y;
  }

【讨论】:

  • 哈哈不用担心!很高兴你今天学到了一些东西。如果您的问题得到解决,请为答案投票
【解决方案2】:

您可以使用此代码:

 function getSides() {
   var x = parseFloat(document.getElementById("side1").value);
  var y = parseFloat(document.getElementById("side2").value);
  var sum = document.getElementById("sides_sum").innerHTML = x + y;
  return sum;
}

function selectModel(selectObject) {
  getSides();
  var z = parseFloat(selectObject.value);
  var cassetta = document.getElementById("box").innerHTML = "You selected value: " + z;
  document.getElementById("final_price").innerHTML = z * getSides();
}

【讨论】:

    【解决方案3】:

    如果你在函数中重新声明一个变量,比如:

    var blub = ..
    function xyz() {
       var blub = ....
    
    }
    

    您在函数的上下文/可见性中创建一个新变量 blub。 js 解析器不知道你想访问第一个定义的 blub 变量,并在最近的上下文中搜索 blub 变量,并首先在函数内找到 blub。因此,将函数内的变量重命名为:

    var blub = ..
    function xyz() {
       var blub2 = ....
       var blub_ = ...
       var blub_inner = 
    }
    

    您可以同时访问两者

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多