2015-10-06 169 views
0
var divs = ["userMenu", "submenu"]; 
var visibleDivId = null; 

function toggleVisibility(divId) { 
    if (visibleDivId == divId) { 
     visibleDivId = null; 
    } else { 
     visibleDivId = divId; 
    } 
    hideNonVisibleDivs(); 
} 

function hideNonVisibleDivs() { 
    var i, divId, div; 
    for (i = 0; i < divs.length; i++) 
    { 
     divId = divs[i]; 
     div = "#" + document.getElementById(divId).id; 
     if (visibleDivId == divId) 
      $(div).fadeIn(); 
     else 
      $(div).fadeOut(); 
    } 
} 

它第一次工作得很好。但是當我點擊一個關閉div的a元素之後嘗試打開相同的div時,我必須點擊它兩次。我明白了爲什麼,我第一次單擊div時,visisbleDivId與divId相同,因此visibleDivId將設置爲null。第二次點擊,它將會淡出,因爲它不再與divId相同。我必須點擊兩次才能看到div。怎麼解決?

我明白髮生了什麼問題,但我不知道如何解決它。

+0

爲什麼'C#'標記? – Sybren

+1

您可以將元素或JQuery對象存儲在變量中,而不僅僅是它們的ID。這可能會讓你更容易。 –

+0

請給出完整的代碼或js小提琴 –

回答

0

您不需要額外的功能。由於您在「visibleDivId」中存儲了哪些div是可見的,因此您只需隱藏該div並且不通過其他div進行循環。

var divs = ["userMenu", "submenu"]; 
var visibleDivId = null; 

function toggleVisibility(divId) { 
    if (visibleDivId == divId) { 
     $(visibleDivId).fadeOut(); 
     visibleDivId = null; 
    } else { 
     if (visibleDivId) { 
      $(visibleDivId).fadeOut(); 
     } 
     visibleDivId = divId; 
     $(visibleDivId).fadeIn(); 
    } 
} 
+0

同伊利亞斯MIMOUNI,它從來沒有能夠在第二次點擊後關閉本身,因爲visibleDivId相同DIVID –

+0

感謝@DannyBrouwer爲指出這一點。固定。 – James

相關問題