2012-08-08 57 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