Javascript 和 JQuery dom 全局变量范围

Javascript and JQuery Dom Global Variable Scope

本文关键字:全局变量 范围 dom JQuery Javascript      更新时间:2023-09-26

我对代码中变量的作用域有问题

var ButtonPressed; //global SCOPE
$(document).ready(function()
{
  function messageAlert()
  {
    $('#buttons').append('<input type="button" id="btn" value="Clickme" />');
    return false;
  }
  messageAlert();
  $('#btn').on("click", function()
  {
    ButtonPressed = 1;
  });
}); //end document
//// UNDEFINED NOT WORKING
if (ButtonPressed === 1)
{
  alert(ButtonPressed);
}

我尝试了有关范围教程的所有内容,但我无法显示变量ButtonPressed=1全局。

有什么帮助吗?

您将单击事件绑定到按钮#btn以设置全局变量ButtonPressed,除非您单击该按钮,否则不会触发该变量。

当您的代码执行并到达块(在全局范围内)时,知道该按钮尚未被单击

if (ButtonPressed === 1)
{
  alert(ButtonPressed);
}

不会设置变量ButtonPressed,因为您尚未单击该按钮,因此它不会发出任何消息警报。

换句话说,if 语句在单击处理程序之前运行

解释你的代码。 执行是这样进行的 ( 1

) --> ( 2 ) --> ( 3 )
    var ButtonPressed; // executed as soon as the script tag is hit -- ( 1 )
    $(document).ready(function()
    {
     //......          //executed ONLY AFTER the DOM is ready - (3 )
    }); 

    if (ButtonPressed === 1) //executed as soon as the script tag is hit - ( 2 )
    { 
      alert(ButtonPressed);
    }

如注释所示,首先执行var ButtonPressed,然后执行跳到if检查。只有在 DOM 完全准备就绪后,$(document).ready中的代码块才会执行。

所以这意味着所有的全局范围代码将首先被执行,然后一个在文档中准备好


1)如果您的目的是在单击按钮时显示警报,请执行此操作

$('#btn').on("click", function()
  {
    ButtonPressed = 1;
    alert(ButtonPressed);
    // do all the stuff that should happen when a button is clicked
  });

2)否则,如果您的目的是检查是否单击了按钮? 那么你可以使用setInterval .使用它,您可以检查是否每 1 秒单击一个按钮。 如下所示。

var checkButtonStatus = setInterval(function(){
                 if (ButtonPressed === 1)
                 { 
                  alert(ButtonPressed);
                  //do all your stuff as the button was clicked
                  clearInterval(checkButtonStatus ); // remove interval as you don't need to check again.
                 }
                }, 1000);

注: I would say option 2 is not efficient way of doing it, Go for option 1