2017-06-06 15 views
1

私は、サイトのページの本文を設定するためにユーザーが選択した色を保存するためにクッキーを使用しようとしています。さて、クッキーはうまくセットされていますが、何らかの理由で私はそれを動作させるようです。私がどこに間違っているのか誰にでも見える?JavaScriptのクッキーが機能しない

ありがとうございました。

コンソールエラー:

Uncaught TypeError: Cannot set property 'className' of null

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

 
if (bgColour == "01") { 
 
    document.getElementById("body").className = "bgColor01"; 
 
} 
 
if (bgColour == "02") { 
 
    document.getElementById("body").className = "bgColor02"; 
 
} 
 
if (bgColour == "03") { 
 
    document.getElementById("body").className = "bgColor03"; 
 
} 
 
if (bgColour == "04") { 
 
    document.getElementById("body").className = "bgColor04"; 
 
} 
 
if (bgColour == "05") { 
 
    document.getElementById("body").className = "bgColor05"; 
 
} 
 

 
function color1() { 
 
    document.cookie = "bgColour=01"; 
 
} 
 

 
function color2() { 
 
    document.cookie = "bgColour=02"; 
 
} 
 

 
function color3() { 
 
    document.cookie = "bgColour=03"; 
 
} 
 

 
function color4() { 
 
    document.cookie = "bgColour=04"; 
 
} 
 

 
function color5() { 
 
    document.cookie = "bgColour=05"; 
 
}
body { 
 
    margin: 0; 
 
    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; 
 
} 
 

 
.bgColor00 { 
 
    background-color: #f6f4fb; 
 
} 
 

 
.bgColor01 { 
 
    background-color: #80b3ff; 
 
} 
 

 
.bgColor02 { 
 
    background-color: #afe9af; 
 
} 
 

 
.bgColor03 { 
 
    background-color: #ffb380; 
 
} 
 

 
.bgColor04 { 
 
    background-color: #ffaaaa; 
 
} 
 

 
.bgColor05 { 
 
    background-color: #eeaaff; 
 
}
<html> 
 

 
<body id="body"> 
 
    <button onClick="color1()">Blue</button> 
 
    <button onClick="color2()">Green</button> 
 
    <button onClick="color3()">Orange</button> 
 
    <button onClick="color4()">Red</button> 
 
    <button onClick="color5()">Purple</button> 
 
</body> 
 

 
</html>

+0

スタックサンドボックスのエラーを除いて、どのようなエラーが表示されますか? – Rick

+0

私は今、エラーで投稿を更新します –

+0

JavaScriptのクッキーにはあまり慣れていませんが、あなたは色と色を数回交換しています。私はより一貫しています、これは実際にあなたの問題を解決します。 – JiFus

答えて

0

私はあなたの問題はあなたが<html>タグの外にスクリプトを配置することだと思います。私はこのようにやってみました:

<html> 
<style> 
body { 
    margin: 0; 
    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; 
} 

.bgColor00 { 
    background-color: #f6f4fb; 
} 

.bgColor01 { 
    background-color: #80b3ff; 
} 

.bgColor02 { 
    background-color: #afe9af; 
} 

.bgColor03 { 
    background-color: #ffb380; 
} 

.bgColor04 { 
    background-color: #ffaaaa; 
} 

.bgColor05 { 
    background-color: #eeaaff; 
} 
</style> 
<body id="body"> 
    <button onClick="color1()">Blue</button> 
    <button onClick="color2()">Green</button> 
    <button onClick="color3()">Orange</button> 
    <button onClick="color4()">Red</button> 
    <button onClick="color5()">Purple</button> 
</body> 

<script type='text/javascript'> 

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

if (bgColour == "01") { 
    document.getElementById("body").className = "bgColor01"; 
} 
if (bgColour == "02") { 
    document.getElementById("body").className = "bgColor02"; 
} 
if (bgColour == "03") { 
    document.getElementById("body").className = "bgColor03"; 
} 
if (bgColour == "04") { 
    document.getElementById("body").className = "bgColor04"; 
} 
if (bgColour == "05") { 
    document.getElementById("body").className = "bgColor05"; 
} 

function color1() { 
    document.cookie = "bgColour=01"; 
} 

function color2() { 
    document.cookie = "bgColour=02"; 
} 

function color3() { 
    document.cookie = "bgColour=03"; 
} 

function color4() { 
    document.cookie = "bgColour=04"; 
} 

function color5() { 
    document.cookie = "bgColour=05"; 
} 
</script> 
</html> 

をそして、それは動作します(エラーが発生しない)、唯一の問題は、あなたがページを更新する必要があり、それが変化するダイナミックではないです。たぶんlocation.reloadはあなたのために動作します、またはあなたが呼び出す必要があります:

document.getElementById("body").className = "bgColor0X"; 

を各colorX()関数内。その後、リロードだけでなくクリック時に色が変わります。

私はこの実例を作った:https://codepen.io/jpaulet/pen/LLVjGO 希望する!

関連する問題