2015-02-05 108 views
1

我有一個javascript函數showHide(shID),它是一個隱藏div並在點擊「read more」後顯示內容的函數。這裏是我的小提琴:FiddleJQuery Cookie不起作用

在將JQuery Cookie添加到此函數後,它看起來像函數showHide(shID)消失了,任何人都可以幫我修復它嗎?謝謝我真的需要幫助。這裏我的小提琴:Fiddle

我需要這樣做smtg:首先點擊「readmore」,隱藏內容會顯示,設置cookie和用戶回來後訪問我的頁面隱藏的內容仍然顯示。

<div id="wrap"> 
    <a href="#" id="example-show" class="showLink" onclick="showHide('example');"> 
     <button class="btn-u btn-u-lg btn-block btn-u-dark-orange"> 
     Read More 
     </button> 
    </a> 
    <div id="example" class="more"> 
     <iframe width="600" height="315" src="//www.youtube.com/embed/BaPlMMlyM_0" frameborder="0" allowfullscreen></iframe> 
     <p>Congratulations! You've found the magic hidden text! Clicking the link below will hide this content again.</p> 
    </div> 
</div> 
+0

JQuery的餅乾 - 這是插入。你需要單獨包括它。糾正我,如果我錯了 – demo 2015-02-05 14:23:12

+0

嗨演示,謝謝你回覆我,我也不太確定,我第一次使用JQuery cookie – lucas 2015-02-05 14:38:53

+0

請看這個http://plugins.jquery.com/cookie/我認爲你需要下載並添加庫到項目 – demo 2015-02-05 14:41:47

回答

3

我改劇本邏輯一點:顯示內容時showhide-...設置爲1。另外,我在showHide函數中添加了一個參數:setCookie。當這是false時,cookie不會被設置/更改。

function showHide(setCookie) { 
    var shID = $(this).data("showhide") 
     , $shEl = $("#" + shID) 
     , $showHide = $("#" + shID + '-show') 
     ; 

    if ($shEl.is(":hidden")) { 
     if (setCookie !== false) { 
      jQuery.cookie("showhide-" + shID, 1); 
     } 
     $showHide.hide(); 
     $shEl.show(); 
    } else { 
     if (setCookie !== false) { 
      jQuery.cookie("showhide-" + shID, 0); 
     } 
     $showHide.show(); 
     $shEl.hide(); 
    } 
} 

jQuery(document).ready(function() { 
    $("#example-show").on("click", showHide); 
    if (jQuery.cookie("showhide-" + "example") == '1') { 
     showHide.call($("#example-show").get(0), false); 
    } 
}); 

要添加到期日期,只要傳遞第三個參數$.cookie電話:

var date = new Date(); 
var minutes = 30; 
date.setTime(date.getTime() + (minutes * 60 * 1000)); 
$.cookie("example", "foo", { expires: date }); 

(參見How to expire a cookie in 30 minutes using jQuery?獲得更多信息)

JSFIDDLE

+0

嗨Ionica Bizau,非常感謝您的幫助!這對我來說很好!但是,如何爲此設置1天過期日期?謝謝 ! = D – lucas 2015-02-06 08:12:29

+0

@lucas酷。查看編輯。 – 2015-02-06 08:14:33

+0

我對嗎?如果我這樣寫的話,在測試http://jsfiddle.net/Garfrey/3Lzytvqy/4/時放1分鐘,我應該在「foo」中改變什麼。 – lucas 2015-02-06 08:24:45

0

Cookie的名稱區分大小寫,您必須閱讀您之前設置的cookie的相同名稱。在你的情況下,你設置 jQuery.cookie("showHide-"+shID, 1)並檢查jQuery.cookie("showhide-" + "example")。 「showHide-」和「showhide-」不匹配。

編輯:

if (document.getElementById(shID + '-show').style.display != 'none') { 
     // Set cookie when button has been clicked 
     jQuery.cookie("showhide-"+shID, 1); 
     // ... 
    } else { 
     jQuery.cookie("showhide-"+shID, 0); 
     // ... 
    } 

    if (jQuery.cookie("showhide-" + "example") == 1) { 
     // Trigger button click if cookie is set 
     $("#example-show").trigger("click"); 
    } 
+0

嗨rba,感謝您的回覆,意味着我只需要把「showhide」放在「showHide」的權利?我曾試過這個,然後才工作 – lucas 2015-02-05 15:27:43

+0

也許你只是需要放置你的按鈕觸發器,當你設置cookie時,它是相反的。從你的答案看來,你似乎想「設置cookie和用戶回來訪問我的頁面隱藏的內容仍然顯示」,並在您的代碼中嘗試「//Cookie沒有設置所以顯示div」的評論。 – rba 2015-02-05 16:05:32

+0

是的,我需要「設置cookie和用戶回來訪問我的頁面隱藏的內容仍然顯示」...對不起,我不是很明白,你能爲我做一個小提琴爲例嗎?我需要爲我的方案項目,我也是新的JavaScript ..謝謝rba, – lucas 2015-02-05 16:36:03