2009-12-23 26 views
1

我目前正在嘗試使用jQuery切換shoutbox的外觀並記住頁面之間的狀態(隱藏/可見)。我遇到的問題是讓cookie設置爲記住狀態。檢查HTML元素的顯示值並將其保存到jQuery中的Cookie

我到目前爲止的代碼是在下面,但它似乎沒有正確執行if聲明。任何想法爲什麼?

function show_shoutbox() { 
    $('#SB').toggle("fast"); 

    if ($('#SB').css('display') == "none") { 
     document.cookie = "displaysb=false;"; 
    } else { 
     document.cookie = "displaysb=true; "; 
    } 
} 

我對JavaScript和jQuery相當陌生 - 所以如果答案很明顯,我很抱歉。我希望學習。

回答

1

嘗試

if ($('#SB').is(':visible')) { 
    ... 
} 

它的標準化工作不是檢查display好一點。

+0

我試過這個......它仍然沒有工作。 – waiwai933 2009-12-23 21:58:51

+0

這不是一個真正的工作與否的問題。這是檢查jQuery是否可見元素的代碼。投票下來的答案,因爲你的代碼被打破幾乎沒有直觀或有幫助。 「它似乎沒有正確執行if語句」 - 我簡要地向你描述瞭如何做到這一點。如果您不喜歡獲得所要求的答案,請更改您的問題。 – 2009-12-23 23:28:10

+0

事實上,不是我低估了任何情況下,我用警報框測試了你的代碼,它總是告訴我它是可見的,不管它是否真實存在。 – waiwai933 2009-12-24 03:22:42

0

document.cookie不能這樣工作。退房:
http://www.quirksmode.org/js/cookies.html

它甚至有代碼在它的結束:

function createCookie(name,value,days) { 
    if (days) { 
     var date = new Date(); 
     date.setTime(date.getTime()+(days*24*60*60*1000)); 
     var expires = "; expires="+date.toGMTString(); 
    } 
    else var expires = ""; 
    document.cookie = name+"="+value+expires+"; path=/"; 
} 

function readCookie(name) { 
    var nameEQ = name + "="; 
    var ca = document.cookie.split(';'); 
    for(var i=0;i < ca.length;i++) { 
     var c = ca[i]; 
     while (c.charAt(0)==' ') c = c.substring(1,c.length); 
     if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); 
    } 
    return null; 
} 

function eraseCookie(name) { 
    createCookie(name,"",-1); 
} 
+0

對不起,你能解釋我做錯了什麼嗎?儘管代碼很有幫助,但我想知道*爲什麼有些事情是錯誤的。 – waiwai933 2009-12-23 21:59:24

-3

緩存的元素效率

var sb=$('#SB');//cache once outside the function 
function show_shoutbox() { 
    sb.toggle("fast"); 
    if (sb.is(':visible')) {//do your business 
    } 
    else { //do something else 
    } 
} 
+1

這並沒有回答這個問題。 – Malfist 2009-12-23 21:41:56

0

使用$('#SB')[0],而不是$('#SB')。 這部分代碼返回滿足要求的所有元素的數組。 並且如果您只有一個具有此ID的元素,則索引爲0的第一個元素是您正在搜索的元素。

相關問題