質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

977閲覧

reloadをかけずに、スムーズに動作する方法

退会済みユーザー

退会済みユーザー

総合スコア0

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/11/21 03:02

●reloadをかけずに、スムーズに動作する方法

○毎回クッキーに保存後reload→クッキーから削除後reloadと
毎回reloadをかけないと反映されない状態です。

reloadをかけずに、
スムーズに動作が済む方法はありますでしょうか。

html

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4<meta charset="Shift_JIS"> 5<title>タイトル</title> 6<script type="text/JavaScript" src="js/jquery.js"></script> 7<script type="text/JavaScript"> 8 // クッキーの値を取得 getCookie(クッキー名); // 9 function getCookie(c_name) { 10 var st = ""; 11 var ed = ""; 12 if (document.cookie.length > 0) { 13 // クッキーの値を取り出す 14 st = document.cookie.indexOf(c_name + "="); 15 if (st != -1) { 16 st = st + c_name.length + 1; 17 ed = document.cookie.indexOf(";", st); 18 if (ed == -1) ed = document.cookie.length; 19 // 値をデコードして返す 20 return unescape(document.cookie.substring(st, ed)); 21 } 22 } 23 return ""; 24 } 25 // クッキー保存 setCookie(クッキー名, クッキーの値, クッキーの有効日数); // 26 function setCookie(c_name, value, expiredays) { 27 // pathの指定 28 var path = location.pathname; 29 // pathをフォルダ毎に指定する場合のIE対策 30 var paths = new Array(); 31 paths = path.split("/"); 32 if (paths[paths.length - 1] != "") { 33 paths[paths.length - 1] = ""; 34 path = paths.join("/"); 35 } 36 // 有効期限の日付 37 var extime = new Date().getTime(); 38 var cltime = new Date(extime + (60 * 60 * 24 * 1000 * expiredays)); 39 var exdate = cltime.toUTCString(); 40 // クッキーに保存する文字列を生成 41 var s = ""; 42 s += c_name + "=" + escape(value);// 値はエンコードしておく 43 s += "; path=" + path; 44 if (expiredays) { 45 s += "; expires=" + exdate + "; "; 46 } else { 47 s += "; "; 48 } 49 // クッキーに保存 50 document.cookie = s; 51 } 52 53 // ②クッキーに値がセットされていれば値を表示 54 var vstitle1 = getCookie('vstitle1'); 55 var url1 = getCookie('url1'); 56 var vstitle2 = getCookie('vstitle2'); 57 var url2 = getCookie('url2'); 58 var vstitle3 = getCookie('vstitle3'); 59 var url3 = getCookie('url3'); 60 var vstitle4 = getCookie('vstitle4'); 61 var url4 = getCookie('url4'); 62 function Title() { 63  if (getCookie('vstitle1') !=="" && getCookie('url1') !=="") { 64 $("p.visit").append('<p class="vs01"><a href="'+ getCookie('url1') +'">' + getCookie('vstitle1')+'</a><button class="Titlebtn1"><span>×</span></button></p>'); 65 //削除ボタンクリックでクッキーの値を削除する 66 $(".Titlebtn1").click(function () { 67 var dt = new Date('1999-12-31T23:59:59Z'); // 過去の日付をGMT形式に変換 68 document.cookie = "vstitle1 =; expires=" + dt.toUTCString(); 69 document.cookie = "url1 =; expires=" + dt.toUTCString(); 70 window.alert('削除しました'); 71 $("p.vs01").remove(); 72 location.reload(); 73 }); 74 75 if(getCookie('vstitle2') !=="" && getCookie('url2') !=="") { 76 $("p.visit").append('<p class="vs02"><a href="'+ getCookie('url2') +'">' + getCookie('vstitle2')+'</a><button class="Titlebtn2"><span>×</span></button></p>'); 77 //削除ボタンクリックでクッキーの値を削除する 78 $(".Titlebtn2").click(function () { 79 var dt = new Date('1999-12-31T23:59:59Z'); // 過去の日付をGMT形式に変換 80 document.cookie = "vstitle2 =; expires=" + dt.toUTCString(); 81 document.cookie = "url2 =; expires=" + dt.toUTCString(); 82 window.alert('削除しました'); 83 $("p.vs02").remove(); 84 location.reload(); 85 }); 86 } 87 if(getCookie('vstitle3') !=="" && getCookie('url3') !=="") { 88 $("p.visit").append('<p class="vs03"><a href="'+ getCookie('url3') +'">' + getCookie('vstitle3')+'</a><button class="Titlebtn3"><span>×</span></button></p>'); 89 //削除ボタンクリックでクッキーの値を削除する 90 $(".Titlebtn3").click(function () { 91 var dt = new Date('1999-12-31T23:59:59Z'); // 過去の日付をGMT形式に変換 92 document.cookie = "vstitle3 =; expires=" + dt.toUTCString(); 93 document.cookie = "url3 =; expires=" + dt.toUTCString(); 94 window.alert('削除しました'); 95 $("p.vs03").remove(); 96 location.reload(); 97 }); 98 } 99 if(getCookie('vstitle4') !=="" && getCookie('url4') !=="") { 100 $("p.visit").append('<p class="vs04"><a href="'+ getCookie('url4') +'">' + getCookie('vstitle4')+'</a><button class="Titlebtn4"><span>×</span></button></p>'); 101 //削除ボタンクリックでクッキーの値を削除する 102 $(".Titlebtn4").click(function () { 103 var dt = new Date('1999-12-31T23:59:59Z'); // 過去の日付をGMT形式に変換 104 document.cookie = "vstitle4 =; expires=" + dt.toUTCString(); 105 document.cookie = "url4 =; expires=" + dt.toUTCString(); 106 window.alert('削除しました'); 107 $("p.vs04").remove(); 108 location.reload(); 109 }); 110 111 } 112 if ($("p.visit") !=="") { 113 $("h3.savetitle").append('<span>保存した検索条件</span>'); 114 } 115 if ($("p.visit") =="") { 116 $(".saveBlock").css('display','none'); 117 } 118 } 119   else{} 120 } 121 122// title、URLをクッキーに保存 123//①空きチェック forループで そのクッキーが存在するかをチェックし、保存処理をする 124 function TitleWrite() { 125 //初期値設定 126 var breakcunt = 4; 127 for( i=0; i<4; i++ ){ 128 if (getCookie('vstitle'+(i+1)) =="" && getCookie('url'+(i+1)) ==""){ 129 breakcunt = i; 130 break ; 131 } 132 } 133 if(breakcunt>3){ 134 window.alert('空きありません'); 135 return ""; 136 } 137 else{ 138  //検索結果のURLを取得 139 //検索結果のタイトル名を取得 140 setCookie('vstitle'+(breakcunt+1), $('.joblist_ttl').text(), 7); 141 setCookie('url'+(breakcunt+1), '.url', 7); 142 window.alert('保存しました'); 143 location.reload(); 144 } 145} 146$(function() { 147 Title(); 148}); 149 150</script> 151 152 153<meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> 154</head> 155<body> 156<div class="saveBlock"> 157<button id="setButton" onclick="TitleWrite();">保存する</button> 158<h3 class="jobtitle joblist_ttl"><span class="jobtitle"><a class="url" href="#test">クッキーに保存するテキスト</a></span></h3> 159<div class="saveBlock clearfix"><h3 class="savetitle"></h3><div><p class="visit"></p></div> 160</div> 161</body> 162</html> 163

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ちょっと煩雑になりすぎていてどの部分が引っかかっているのかわかりかねますが

javscript

1console.log(getCookie('a')); 2setCookie('a',123); 3console.log(getCookie('a')); 4setCookie('a',456); 5console.log(getCookie('a'));

普通にgetもsetもできているようなので、reloadの必要性がいまいちわかりません
getしてチェックしたあとsetしているのでしょうか?
setしたのと同等のデータを必要な変数にわたしたり、set後に再度getしたりでは
ダメなのでしょうか?

投稿2017/11/21 03:14

yambejp

総合スコア114769

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/11/21 03:19

ご回答ありがとうございます。 getしてチェックしたあとsetしているのでしょうか? →そうです。 setしたのと同等のデータを必要な変数にわたしたり、set後に再度getしたりではダメなのでしょうか? →set後に再度getすると、 2つめのタイトルが表示されたときに、一つめのタイトルが、2回表示されてしまいます。
yambejp

2017/11/21 03:26 編集

class:vs~をチェックして存在すれば書き換え、しなければappendするとか if($('.vs1').length>0){ $('.vs1').html(なんたら) }else{ $("p.visit").append(かんたら) } }
退会済みユーザー

退会済みユーザー

2017/11/21 04:10

ありがとうございます。 先ほど教えていただいた、 set後に再度getの件ですが、 もう一度やってみると、 上手く表示されました。 ただ、保存するTitleWriteの後には、 reloadをかけないとうまくできませんでした。 else{  //検索結果のURLを取得 //検索結果のタイトル名を取得 setCookie('vstitle'+(breakcunt+1), $('.joblist_ttl').text(), 7); setCookie('url'+(breakcunt+1), '.url', 7); window.alert('保存しました'); location.reload(); }
yambejp

2017/11/21 04:13

reloadにたよらず、所定の値を利用して書き換えるようにしてください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問