область видимости переменной getElementById - PullRequest
0 голосов
/ 28 июня 2018

в следующем примере, почему «status.value» не доступен внутри функции? Если я заменю «status.value» на document.getElementById («Label»). Значение внутри функции все будет работать хорошо. Спасибо.

<html>
<body onload="Ticker()">
 <label>Connection Status:</label>
 <input type="text" readonly="true" value="Idle" id="Label">
 <input type="button" value="Start/Stop" onclick="run=!run">
 <br>

 <script>
 var status = document.getElementById("Label");
 var run;

  function Ticker() {
      setTimeout( Ticker, 100 );

        if(run){
           status.value = "Connected";
        }else{
           status.value = "Disconnected";
        }
  }
</script>
</body>
</html>

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Поскольку функция по таймеру выполняется в следующем цикле событий, она не будет знать о состоянии. Если вы хотите передать «статус», вы должны передать его в качестве параметра функции settimeout, как показано ниже: -

 var status = document.getElementById("Label");
function Ticker(status) {
        setTimeout(Ticker, 100,status);      
        if (run) {
          status.value = "Connected";
        } else {
          status.value = "Disconnected";
        }
      }
0 голосов
/ 28 июня 2018

<html>

  <body onload="Ticker()">
    <label>Connection Status:</label>
    <input type="text" readonly="true" value="Idle" id="Label">
    <input type="button" value="Start/Stop" onclick="run=!run">
    <br>

    <script>
      var run;

      function Ticker() {
        setTimeout(Ticker, 100);
        var status = document.getElementById("Label");
        if (run) {
          status.value = "Connected";
        } else {
          status.value = "Disconnected";
        }
      }

    </script>
  </body>

</html>
...