2012-08-08 94 views
1

控制台在最后没有检测到overExpand为真。难道我做错了什么?为什么不检测布尔变量?

var transLayer = $('.transparentBg'); 
var overExpand = false; 
var overUl = false; 


$(transLayer).hide(); 
console.log('transLayer hide'); // this is being logged 

$('#header .nav .wrapper > ul > li.expand').hover(function(){ 
    overExpand = true; 
    console.log(overExpand);// this works = true  
}, function(){ 
    overUl = true; 
}); 

console.log(overExpand); // this shows false 

回答

3

该值为false,因为将代码设置为true永远不会运行。

您在悬停事件处理程序中有overExpand = true。直到事件被解雇,代码才会运行。 console.log(overExpand)肯定会在事件被触发前执行,因此overExpand仍然是错误的。

如果你想看到的值设置为true后,你应该记录在处理器中:

$('header .nav .wrapper > ul > li.expand').hover(function(){ 
    overExpand = true; 
    console.log(overExpand); 
}, function(){ 
    overUl = true; 
}); 

如果你真的希望它是真实的它目前编写方式,你将不得不重构代码。

+0

我更新了我的问题中的一些代码。是的你是对的,添加'console.log'确实在悬停事件中起作用。但是有没有办法从事件外部检测布尔变化? – muudless 2012-08-08 01:38:24

+0

@ muudless - 我原来的答案仍然适用。由于在事件被触发之前该值没有被设置,所以在添加处理程序之后但在处理程序触发之前执行的代码仍然会看到原始值。 – 2012-08-08 01:47:54

+0

谢谢,我现在明白了。我想我只需要在调用悬停事件时触发另一个函数。 – muudless 2012-08-08 01:55:47

1

在悬停功能中添加您的console.log()

$('#header .nav .wrapper > ul > li.expand').hover(function(){ 
    overExpand = true;  
    console.log(overExpand); 
}, function(){ 
    overUl = true; 
}); 

这将在您每次将鼠标悬停在元素上时在您的控制台中创建一个新日志,因为这是执行此功能时的情况。在您之前的代码中,在触发悬浮功能之前发生对console.log()的调用。

+2

你应该可以解释为什么这个作品 – 2012-08-08 01:34:02

+0

@SiGanteng - 公平点。完成。 – ahren 2012-08-08 01:35:59