2011-12-22 54 views
1

當我嘗試閱讀我的餅乾,我設置的東西看起來不正確javaScript時髦的cookie?

這裏是我的cookie功能

function readCookie(){ 
if (document.cookie !=""){ 
    document.getElementsByName("eMail").innerHTML = alert("hello, " +  
document.cookie.split("=")[1]); 
} 
} 

//for setting cookies 
function writeCookie(cName, cValue, expDate, cPath, cDomain, cSecure){ 
if(cName && cValue!= ""){ 
var cString = cName + " = " + escape(cValue); 

if (expDate) cString += ";expires=" + expDate,toGMString(); 
if (cPath) cString += ";path=" + cPath; 
if (cDomain) cString += ";domain=" + cDomain; 
if (cSecure) cString += ";secure"; 

document.cookie = cString; 
} 
} 

的cookie被設置

<input type="submit" value="Submit"  
onclick="writeCookie('userId',document.getElementsByName('eMail').value)"/> 

警告框

hello, undefined;__utma 

想到這是什麼意思?

回答

5

警報函數返回undefined

所以

document.getElementsByName("eMail").innerHTML = alert("hello, " + 
     document.cookie.split("=")[1]); 

eMail的HTML設置爲undefined

另外,getElementsByName返回集合的元素。

您是不是要找

document.getElementsByName("eMail")[0].innerHTML = "hello, " +  
     document.cookie.split("=")[1]; 

還是有這個名字的多個元素?

var eMailElements = document.getElementsByName("eMail"); 
for (var i = 0; i < eMailElements.length; i++) 
    eMailElements[i].innerHTML = "hello, " + document.cookie.split("=")[1]; 

最後,如果只有你的目標一個元素,你可以給它一個(唯一的)ID,然後簡單地做

document.getElementById("eMailId").innerHTML = "hello, " +  
     document.cookie.split("=")[1]; 
+0

document.getElementsByName是我將它切換到ID的罪魁禍首,雖然它仍然給我在__UTMA警報字符串結尾 – Overcranked 2011-12-22 03:00:28

+0

@Overcranked - 我真的不知道。我會收集所有更新後的代碼,併發布帶有錯誤消息的新問題。 – 2011-12-22 03:13:28

3

的幾個問題:

if(cName && cValue!= ""){ 

更改爲:

if ((cName != "") && (cValue != "")) { 

而且這條線有問題:

if (expDate) cString += ";expires=" + expDate,toGMString(); 
              ^Should be a period 
+0

+1爲逗號 - >期間轉換:) – 2011-12-22 01:49:51

0

我在那裏看到__utma,告訴我一兩件事:你的頁面上有谷歌廣告的地方。他們爲跟蹤用戶設置了Cookie,並且您的腳本正在閱讀它們。無論如何,你的閱讀cookies的方法是錯誤的。

function readCookie(cName) { 
    var cookies = document.cookie.split(";"), 
     l = cookies.length, i, k, v; 
    for(i=0; i<l; i++) { 
     v = cookies[i].split("="); 
     k = v.shift(); 
     v = v.join("="); 
     if(k == cName) return v; 
    } 
} 

此外,getElementsByName()返回一個節點列表,所以你需要得到[0]關閉它,或寫入cookie時使用getElementById()代替 - 這就是爲什麼cookie的結果是不確定的。

+0

該頁面沒有谷歌廣告 – Overcranked 2011-12-22 02:46:14

+0

Google Analytics(分析)?任何其他Google託管的代碼?也許jQuery?無論如何,主要的一點是,如果你有更多的餅乾而不僅僅是一個,這會讓你更容易。 – 2011-12-22 12:51:53