2014-01-27 54 views
0

好吧,我一直拉着我的頭髮幾個小時與這一個,現在,我完全禿頭我扔毛巾,看看是否有人可以點到(我敢肯定非常簡單)的錯誤是把我的代碼變成無用的垃圾。不明白爲什麼我不能通過名字閱讀java cookies

我有兩頁,第一個用戶輸入3個輸入和將它們保存爲餅乾:

<script type="text/javascript"> 
    function CC() 
     { 
     var V1Box = document.getElementById("V1"); 
     var V2Box = document.getElementById("V2"); 
     var V3Box = document.getElementById("V3"); 
     var V1 = V1Box.value; 
     var V2 = V2Box.value; 
     var V3 = V3Box.value; 

      document.cookie = "V1 = " + V1 + "; path=/"; 
      document.cookie = "V2 = " + V2 + "; path=/"; 
      document.cookie = "V3 = " + V3 + "; path=/"; 

     window.location = "pg2.html"; 
     } 

</script> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 
<html lang="en"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<meta name="Generator" content="Serif WebPlus X5"> 
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8"> 
<title>db2</title> 
<style type="text/css"> 
body {margin: 0px; padding: 0px;} 
.Artistic-Body-C 
{ 
    font-family:"Verdana", sans-serif; font-size:27.0px; line-height:1.19em; 
} 
</style> 
<link rel="stylesheet" href="wpscripts/wpstyles.css" type="text/css"> 
</head> 
<body text="#000000" style="background-color:#ffffff; text-align:center; height:900px;"> 
<div style="background-color:transparent;text-align:left;margin-left:auto;margin 
right:auto;position:relative;width:375px;height:900px;"> 
<form id="form_1" action="" method="post" target="_self" style="margin:0px;"> 
<input type="button" style="position:absolute; left:271px; top:12px; width:81px; 
height:22px;" value="Submit" onClick="CC()"> 
<input type="text" id="V1" name="V1" value="" style="position:absolute; left:23px; 
top:12px; width:227px;"> 
<input type="text" id="V2" name="V2" value="" style="position:absolute; left:23px; 
top:46px; width:227px;"> 
<input type="text" id="V3" name="V3" value="" style="position:absolute; left:23px; 
top:80px; width:227px;"> 
</form> 
</div> 
</body> 
</html> 

第二頁應該接受預先設置的Cookie,孤立存在的值:

<script type="text/javascript"> 

window.onload = function getCookie(){ 

var allcookies = document.cookie; 
    cookiearray = allcookies.split(';'); 

    for(var i=0; i < cookiearray.length; i++){ 
     var name = cookiearray[i].split('=')[0]; 
     var value = cookiearray[i].split('=')[1]; 
     if(name == 'V1'){var V1 = value;} 
     if(name == 'V2'){var V2 = value;} 
     if(name == 'V3'){var V3 = value;} 
    } 

document.getElementById("V1").innerHTML += V2; 
document.getElementById("V2").innerHTML += V1; 
document.getElementById("V3").innerHTML += V3; 
} 

</script> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 
<html lang="en"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<meta name="Generator" content="Serif WebPlus X5"> 
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8"> 
<title>db2</title> 
<style type="text/css"> 
body {margin: 0px; padding: 0px;} 
.Artistic-Body-C 
{ 
    font-family:"Verdana", sans-serif; font-size:27.0px; line-height:1.19em; 
} 
</style> 
<link rel="stylesheet" href="wpscripts/wpstyles.css" type="text/css"> 
</head> 
<body text="#000000" style="background-color:#ffffff; text-align:center; height:900px;"> 
<div style="background-color:transparent;text-align:left;margin-left:auto;margin 
right:auto;position:relative;width:375px;height:900px;"> 
<div style="position:absolute;left:23px;top:12px;"> 
    <div class="Wp-Artistic-Body-P"> 
     <span class="Artistic-Body-C" id="V1">V1: </span></br> 
     <span class="Artistic-Body-C" id="V2">V2: </span></br> 
     <span class="Artistic-Body-C" id="V3">V3: </span></br></div> 
</div> 
</div> 
</body> 
</html> 

我遇到的問題是代碼無法識別這些if語句中的任何名稱 - 即使我回顯名稱和值;它會回顯「V3」和相應的值,但V3變量從不設置,並會回顯爲「未定義」。試圖弄清楚如何將名稱設置爲「V3」,但不識別「if(name =='V3'){var V3 = value)」,並且將var V3保留爲未定義。我甚至測試過「if(name!='V3'){var V3 = value)」,即使在回顯名稱並獲得「V3」時,它也會在if語句中解釋不等於V3的名稱,並實際設置相應的V3變量值。我不明白它如何正確命名所有內容,正確檢索所有內容,然後在if語句中無法識別該名稱以正確設置變量 - 如果我正在調用V1或V2或V3,則無關緊要;它只是不會在if語句中看到這些名字。

我敢肯定,在我的語法中,這是愚蠢的,或者有一個錯字或什麼的,但經過三個小時的嘗試自己修復它,我顯然是盲目的。我認識到還有其他更簡單的方式來操縱用戶輸入,但是作爲一個整體,我的項目要求我使用cookie,並且能夠通過不同頁面上的名稱檢索它們;如果你對如何以更好的方式完成這個標準有任何建議,我會非常感激,但只是讓我現在的代碼正常工作將是一個很大的幫助和我的頭皮(當我繼續抓住任何剩餘大量的頭髮已經開始大量流血)非常感謝你。

+2

java或javascript?上次我檢查他們是2個不同的東西:) – Dalorzo

+0

JSLInt你的JavaScript代碼,看看錯誤。 – epascarello

+0

謝謝,我從這一切開始轉向JSLInt,所以至少這對我將來會有幫助。不幸的是,在這種情況下,它給了我一些小問題,這些問題不會影響應用程序,然後在解決我的問題(在47%)之前切斷,所以即使使用該工具我也會丟失。 – Oldtimer

回答

0

看看V1,V2,V3在哪裏申報!

if(name == 'V1'){var V1 = value;} <-- what happens if not true 
    if(name == 'V2'){var V2 = value;} <-- what happens if not true 
    if(name == 'V3'){var V3 = value;} <-- what happens if not true 

它們不會被定義。

你需要有

var v1 = ""; 
var v2 = ""; 
var v3 = ""; 

聲明並刪除IFS內部的變種。

JSLint/JSHint會指出這個錯誤。


第三個問題是innerHTML的不能有+ =

document.getElementById("V1").innerHTML = document.getElementById("V1").innerHTML + V1; 

另一個問題是在名稱的空白。餅乾有一個空間後;這在名稱中沒有說明。

+0

感謝您的快速響應!不幸的是,這仍然似乎沒有解決我的問題 - 現在var V3返回空而不是未定義。它似乎仍然不認可名稱爲V3(即使它告訴我如果我回顯「名稱」)。我想知道如果你不介意給我看看你的解決方案看起來像什麼「全部在一起」,因爲我可能會根據正確的順序定義空值(目前只有在我開始我的「for」循環之前) – Oldtimer

+0

再次感謝,不幸的是我仍然沒有收到cookie數據。我已經將這些代碼分開了,並重新組合了上千種不同的方式,我相信在這一點上,問題直接在於它不在if語句中正確解釋名稱。這真是令人困惑和沮喪;如果我叫這個名字,它給了我循環中的最後一個名字 - 「V3」,但是它不會像以前那樣識別出「if(name =='V3')」。任何你可以給予的幫助將不勝感激;不知道我能否處理另一天無路可走的問題。 – Oldtimer

+0

http://jsfiddle.net/Eg33F/1/簡單的調試顯示錯誤。觀看警報,你看到了什麼? – epascarello

-1
<script type="text/javascript"> 


function getCookie(){ 

var allcookies = document.cookie; 
    cookiearray = allcookies.split(';'); 

    for(var i=0; i < cookiearray.length; i++){ 
     var name = cookiearray[i].split('=')[0]; 
     var value = cookiearray[i].split('=')[1]; 
     if(name == 'V1'){var V1 = value;} 
     if(name == 'V2'){var V2 = value;} 
     if(name == 'V3'){var V3 = value;} 
    } 

document.getElementById("V1").innerHTML += V2; 
document.getElementById("V2").innerHTML += V1; 
document.getElementById("V3").innerHTML += V3; 
} 

window.onload = getCookie; 
</script> 

我不相信getCookie函數曾經運行過。

+0

感謝您的幫助,但不幸的是,這仍然不會給我我要找的 - V3返回「[object HTMLSpanElement]」 – Oldtimer

相關問題