2013-01-13 66 views
1

我有一個圖像的網頁。 用戶可以點擊圖像來顯示()或海德()這些圖像。jQuery JavaScript:如何跟蹤用戶完成的操作?

有時,用戶打開一個彈出來觀看視頻。

然後代碼隱藏()以前打開的所有元素。

當用戶關閉視頻,我需要知道哪些要素,以只顯示他們以前打開。

什麼是做到這一點的最好方法是什麼?

我做了什麼:

我創建了一個數組,我把圖片的名字進去。

var arr_popup_open = []; 

然後,當用戶打開一個彈出和隱藏所有元素調用此函數:

function toggleAllPopup() { 
if($('#popup_micro_1').is(":visible")) 
     { 
      $('#popup_micro_1').hide(); 
      arr_popup_open.push('#popup_micro_1'); 
     } 
if($('#popup_micro_2').is(":visible")) 
     { 
      $('#popup_micro_2').hide(); 
      arr_popup_open.push('#popup_micro_2'); 
     } 
if($('#popup_micro_3').is(":visible")) 
     { 
      $('#popup_micro_3').hide(); 
      arr_popup_open.push('#popup_micro_3'); 
     } 
    } 
// and so on ... I have 7 images so it seems it's not very well optimized 

,當我需要只顯示先前打開的圖片,我執行這個代碼,循環顯示( )數組中的元素。

$('#close_pop_up').click(function() { 
    for(var i= 0; i < arr_popup_open.length; i++) 
    { 
     $(arr_popup_open[i]).show(); 
    } 
}); 

您對此有何看法?有沒有更好的方法來做到這一點?

回答

2

有幾種方法可以用jQuery去解決這個問題。你的方法應該可行,但如果你想減少的代碼,你可以做類似的量:

var visibleDivs = $('.someClassName'); 

var visibleDivs = $('div:visible', '#ContainerDiv'); 

或者,當你向他們展示和使用,你可以添加特定類的所有可見元素

當隱藏它們因您的彈出式窗口,您可以存儲中的任何元素的數據列表。在這種情況下,把它放在#close_pop_up可能是有意義的:

visibleDivs.hide(); 
$('#close_pop_up').data('myDivs', visibleDivs); 

當你想在你點擊功能再次顯示:

$('#close_pop_up').click(function() { 
    $(this).data('myDivs').show(); 
}); 
+0

我不知道.data(),謝謝這是我需要的......我會嘗試你的解決方案 –

1

看起來很好。請記住在toggleopen函數的開始處清除arr_popup_open

如果你真的想要的話,你可以做的另一種選擇是在打開和關閉東西時保留Javascript變量中打開或關閉的信息。這樣你就不需要依賴複雜的東西了,比如is(:visible)

+0

是,該陣列已經被清除。我會根據你的建議使用變量。在這種情況下,變量可以是一些文本,如var image_1;當函數被調用時:image_1 =「打開」等等。然後if語句if(image_1 ==「open」)等等。你認爲我可以使用其他類型的變量嗎? –

+0

我猜這個關於變量的最後一個問題的答案由 beezir通過使用.data() –

+1

給出。對於變量,我通常更喜歡使用與div的id相對應的哈希表鍵:'var isVisible = {}; isVisible ['popup_micro_1] = false;'等我發現它更清晰,然後有大量無關變量或數據隱藏在教堂內。 – hugomg