2013-07-02 102 views
1

這裏是我的代碼:檢查變量真正與if語句

$(val1).mouseleave(function() { 
    flag = false; 
    $(val3 + "," + val4).mouseenter(function() { 

     flag = true; 
     //alert(flag); 

    }); 
    if (flag == true) { 
     //alert("if"+flag); 
     $(".big" + i + j + "boxer").show(); 
     $(".big" + i + "box").show(); 
     $(".big" + i + "box").append('<div class="opacity" style="background-color:rgba(00,00,00,0.77);position:absolute;top:0;right:0;left:0;bottom:0;"></div>') 
     $(".small" + i + "box").append('<div class="opacity" style="background-color:rgba(00,00,00,0.77);position:absolute;top:0;right:0;left:0;bottom:0;"></div>') 

    } else { 
     //alert("else"+flag); 
     $('.opacity').remove(); 
     $(val2).hide(); 
     $(val3).show(); 

    } 
}); 

它不符合條件flag = true。如果我在$(val1).mouseleave(function(){});alert,則表明flag = true;但是當我在$(val1).mouseleave(function(){});之外提醒時,它顯示flag = false

好吧,讓我解釋一下:我有4個區塊val1,val2,val3val4。當用戶離開val1並進入val3val4塊,我想set/add opacity class ...如果他們do not enterval3/val4val2 or another block塊,然後我想刪除不透明類。

+0

試標誌===真 – wilsonrufus

+0

你可以發佈html嗎? – 2013-07-02 11:28:08

+0

嗨@wilsonrufus我試過flag === true ...但沒有工作... – Friend

回答

-1

將標誌聲明爲全局變量。應該修復它。除非你這樣做,否則你想在外面提醒的標誌實例不存在,因爲這個函數是本地的。

+5

否。在JavaScript中,任何未聲明的變量都自動爲全局變量。 – techfoobar

+0

閱讀代碼。被宣佈。 – zozo

+1

未聲明 – wilsonrufus

4

,在您做,如果測試點:

if(flag==true) 

... flag總是是假的,因爲你之前只是它設置爲false。它被設置爲true的唯一地方是在你綁定的mouseenter處理函數內,但是那個處理函數不會被調用。

讓我添加到您的代碼的開頭有一些註釋,試圖使該更清楚:

$(val1).mouseleave(function() { 
    flag = false;         // set flag to false 
    $(val3 + "," + val4).mouseenter(function() { // bind a mouseenter 
     flag = true;        // that won't be called immediately 
     //alert(flag);        // so won't change flag yet 
    }); 
    if (flag == true) {       // flag is still false 

它沒有意義的結合從mouseleave處理器內部mouseenter處理程序,因爲這意味着每如果發生mouseleave,則會將其他mouseenter處理程序綁定到相同的元素。

我無法真正提出具體的解決方案,因爲您尚未解釋您嘗試實現的效果。 (但我可能會通過移動mouseenter代碼別的地方開始)

+0

感謝您回答...解決此問題的任何替代方法?如果在這種情況下,如果條件在jquery中,我們如何使用? – Friend

+0

你究竟想要達到什麼目的?請按照「當用戶移動鼠標[某處]時,請執行[某事]」。 – nnnnnn

+0

嗨@nnnnnn我已編輯我的問題,請檢查它....我明白了你的觀點,但實際上我正在尋找替代解決方案來解決這個問題... – Friend

1
$(val1).mouseleave(function() { 
    flag = false; 
    $(val3 + "," + val4).mouseenter(function() { 

     flag = true; 
     //alert(flag); 
     if (flag == true) { 
     //alert("if"+flag); 
     $(".big" + i + j + "boxer").show(); 
     $(".big" + i + "box").show(); 
     $(".big" + i + "box").append('<div class="opacity" style="background-color:rgba(00,00,00,0.77);position:absolute;top:0;right:0;left:0;bottom:0;"></div>') 
     $(".small" + i + "box").append('<div class="opacity" style="background-color:rgba(00,00,00,0.77);position:absolute;top:0;right:0;left:0;bottom:0;"></div>') 

    } else { 
     //alert("else"+flag); 
     $('.opacity').remove(); 
     $(val2).hide(); 
     $(val3).show(); 

    } 

    }); 

}); 
+0

這應該是它 – wilsonrufus

+0

非常感謝您的企圖@wilsonrufus,但我已經嘗試過這...在這種情況下,它不採取'國旗=虛假',它總是需要'國旗=真' – Friend

+0

yup這是錯誤的: ( – wilsonrufus

1

既然你已經明確你的目標,我認爲像這樣的工作:

var haveLeft = null;  

$(val1).mouseleave(function() { 
    haveLeft = "val1"; 
}); 

$(val2).mouseenter(function() { 
    if(haveLeft === "val1") { 
     // remove opacity class 
    }   
}).mouseleave(function(){ 
    haveLeft = "val2"; 
}); 

$(val3 + "," + val4).mouseenter(function() { 
    if(haveLeft === "val1") { 
     // add opacity class 
    } 
}).mouseleave(function(){ 
    haveLeft = "val3/4"; 
}); 
+0

+1。這與我之前建議的要求在前面指定的非常相似 - 足夠接近以至於我更新自己的答案時沒有意義。 – nnnnnn