单击时更改布尔值

时间:2014-06-17 15:58:28

标签: 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 true;'); // This console log doesn't show up
}

我知道这必须与范围有关但我无法看到我出错的地方,感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

问题是$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条件放入处理程序中。

答案 1 :(得分:0)

  • 您对变量的范围是正确的,但要检查点击状态,if()条件应该在处理程序或函数中;这将在点击时被调用。

  • 如果您只是将if()添加到$(document).ready$popupStauts将始终保持为假。

  • 要验证布尔更改,您应该在点击时或点击处理程序工作后检查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
    }
}

<强> Demo

答案 2 :(得分:0)

问题是您只评估$popupStatus变量一次 - 文档加载完毕后。您可能希望将其移动到click处理程序或具有调用函数以检查最新值的函数(请参阅@ shaunakde&#39; s解决方案)。

<强> 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);
});

<强> HTML:

<ul>
    <li><a href="#">Something</a></li>
</ul>

<强> DEMO