Jquery 单击更改布尔值

Jquery 单击更改布尔值,jquery,scope,Jquery,Scope,我试图在单击时将变量从false更改为true var $popupStatus = false; $('li a').click(function() { console.log('The list item has been clicked'); // This console log is successful $popupStatus = true; }); if($popupStatus) { console.log('The popup variable is t

我试图在单击时将变量从false更改为true

var $popupStatus = false;

$('li a').click(function() {  
  console.log('The list item has been clicked'); // This console log is successful
  $popupStatus = true;
});

if($popupStatus) {
  console.log('The popup variable is true;'); // This console log doesn't show up
}

我知道这一定与作用域有关,但我看不出哪里出了问题,谢谢你的帮助。

问题是
$popupStatus
只有在执行单击处理程序时才会更改为
false
,而在解析js时,单击处理程序尚未触发

当遇到
if()
时,
$popupStatus
仍然是
false
,因此
if
没有成功

尝试触发事件:

$('li a').click(function() {  
  console.log('The list item has been clicked'); // This console log is successful
  $popupStatus = true;
}).trigger('click');
或者根据您尝试执行的操作,将
if
条件放入处理程序中

  • 变量的作用域是正确的,但要在单击时检查状态,
    if()
    条件应该在处理程序或函数中;单击时将调用

  • 如果只需将
    If()
    添加到
    $(document).ready
    $popupstats
    将始终保持为false

  • 要验证布尔更改,应在单击时或单击处理程序工作后使用
    if()
    进行检查


试试这个

var $popupStatus = false;

$('li a').click(function(event) {
  event.preventDefault();
  console.log('The list item has been clicked'); // This console log is successful
  $popupStatus = true;
  checkStatus();
});

function checkStatus(){
    if($popupStatus) {
       console.log('The popup variable is true;'); // This console log doesn't show up
    }
}

问题在于,当文档加载完毕时,您只对
$popupStatus
变量进行了一次评估。您可能希望将其移动到
单击
处理程序,或者使用一个函数调用一个函数来检查最近的值(请参阅@shaunakde的解决方案)

jQuery:

var $popupStatus = false;

$('li').on('click', 'a', function() {

   $popupStatus = !($popupStatus); // This assigns $popupStatus an opposite value
   // $popupStatus = true; // Just sets $popupStatus to true

   alert($popupStatus);
});
<ul>
    <li><a href="#">Something</a></li>
</ul>
HTML:

var $popupStatus = false;

$('li').on('click', 'a', function() {

   $popupStatus = !($popupStatus); // This assigns $popupStatus an opposite value
   // $popupStatus = true; // Just sets $popupStatus to true

   alert($popupStatus);
});
<ul>
    <li><a href="#">Something</a></li>
</ul>

如果条件应该是在一个函数内单击手柄谢谢你,仍然在尝试学习何时使用该函数!所有这些答案都很有道理,我选择了你们的答案,因为这对我来说是最容易理解的,谢谢你们!