2011-12-22 56 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