为啥这个带有布尔变量的函数不起作用?

Posted

技术标签:

【中文标题】为啥这个带有布尔变量的函数不起作用?【英文标题】:Why doesn't this function with boolean variable work?为什么这个带有布尔变量的函数不起作用? 【发布时间】:2018-05-21 11:28:45 【问题描述】:

我编写了简单的代码来在单击按钮后显示/隐藏一些图层(总共 5 个)并更改单击按钮的颜色。这很好用。但是后来我想显示某个元素 - 一个箭头 - 只有在使用布尔变量单击第一个按钮并且它不起作用之后,if 语句永远不会返回第一个(万岁)部分。我错过了什么?

var click01 = false;

function allowright1() 
  if (click01 == true) 
    console.log('hoooray');
    $('#right_arrow').removeClass('hidden').addClass('visible');
   else 
    console.log('not working');
  
;

$('#tile1_p1').click(function() 
  if ($('#1layers1').css('display') == 'none') 
    $('#1layers2, #1layers3, #1layers4, #1layers5').removeClass('block').addClass('none');
      $('#tile2_p1, #tile3_p1, #tile4_p1, #tile5_p1').removeClass('orange');
      $('#1layers1').removeClass('none').addClass('block'); $('#tile1_p1').removeClass('white').addClass('orange');
      var click01 = true; 
      console.log('click01 ' + click01); 
      allowright1();
    
    else if ($('#1layers1').css('display') == 'block') 
      $('#1layers1').removeClass('block').addClass('none');
      $('#tile1_p1').removeClass('orange').addClass('white');
    
  );

【问题讨论】:

您需要在事件处理程序中使用click01 = true; 删除var 使用var click01,您正在声明变量,您正在为全局变量赋值,只需删除var关键字就完成了! 看看变量作用域和闭包w3schools.com/js/js_function_closures.asp @glutengo 请不要使用 W3Schools 作为参考。他们的文章经常过时,有时甚至完全是错误的。 MDN 更加全面和准确:developer.mozilla.org/en-US/docs/Web/javascript/Reference/… 是的!在事件处理程序中删除“var”是解决方案,非常感谢大家:) 【参考方案1】:

您没有重新分配***变量click01

通过指定var click01 = true;,您在点击处理程序中声明了一个不同于***变量的变量。如果您删除 var 它应该对您有用,例如

$(...).click(function() 
  ...
  click01 = true; // by removing var we reassign the top level variable
  ...
);

【讨论】:

以上是关于为啥这个带有布尔变量的函数不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

AnyLogic - 为啥我的基于条件的转换不起作用?

为啥这个切换按钮在颤振 - 飞镖中不起作用?

为啥用变量排除标签在机器人框架中不起作用?

为啥这个 micropython 函数不起作用?

为啥这个 PHP 递归函数不起作用

为啥 memset 功能不起作用? [复制]