回答編集履歴

1

サンプルソースの追加

2017/09/20 01:49

投稿

rkojima
rkojima

スコア421

test CHANGED
@@ -4,4 +4,170 @@
4
4
 
5
5
 
6
6
 
7
- PHP側でCOOKIE保存以外の処理もする予定で、ajaxも必須要件なのでしょうか?
7
+ PHP側でCOOKIE保存以外の処理もする予定で、Ajaxも必須要件なのでしょうか?
8
+
9
+
10
+
11
+ ---
12
+
13
+
14
+
15
+ 以下追記
16
+
17
+
18
+
19
+ COOKIEの操作をするだけなら、Ajaxで通信挟むよりJavaScriptだけで完結したほうが通信リソース/サーバリソースを使わないのでいいと思います。
20
+
21
+
22
+
23
+ これ以上は本題から外れてしまうため、Ajax使わない場合のサンプルだけ提示します。
24
+
25
+
26
+
27
+ 動作デモ
28
+
29
+ https://jsfiddle.net/2kkphpyd/
30
+
31
+
32
+
33
+ ```HTML
34
+
35
+ <a href="#" class="favorite add_fav" data-id="1">お気に入りに追加</a><br>
36
+
37
+ <a href="#" class="favorite add_fav" data-id="2">お気に入りに追加</a><br>
38
+
39
+ <a href="#" class="favorite add_fav" data-id="3">お気に入りに追加</a><br>
40
+
41
+ ```
42
+
43
+
44
+
45
+ ```JavaScript
46
+
47
+ $(function(){
48
+
49
+ $(".favorite").on('click', function(){
50
+
51
+ if ($(this).hasClass("add_fav")) {
52
+
53
+ addFavorite( $(this).data('id'));
54
+
55
+ elementLookFavorite(this, true);
56
+
57
+ } else {
58
+
59
+ deleteFavorite( $(this).data('id'));
60
+
61
+ elementLookFavorite(this, false);
62
+
63
+ }
64
+
65
+
66
+
67
+ return false;
68
+
69
+ });
70
+
71
+
72
+
73
+ var elementLookFavorite = function(targetElement, isfavorite) {
74
+
75
+ if (isfavorite) {
76
+
77
+ $(targetElement).text("お気に入り解除");
78
+
79
+ $(targetElement).toggleClass('add_fav', false);
80
+
81
+ } else {
82
+
83
+ $(targetElement).text("お気に入りに追加");
84
+
85
+ $(targetElement).toggleClass('add_fav', true);
86
+
87
+ }
88
+
89
+ };
90
+
91
+
92
+
93
+ var addFavorite = function(id) {
94
+
95
+ var fav = loadCookieFavorite();
96
+
97
+ if (fav.indexOf(String(id)) === -1) {
98
+
99
+ fav.push(id);
100
+
101
+ saveCookieFavorite(fav);
102
+
103
+ } else {
104
+
105
+ window.alert('すでにお気に入りに入っています');
106
+
107
+ }
108
+
109
+ };
110
+
111
+
112
+
113
+ var deleteFavorite = function(id) {
114
+
115
+ var fav = loadCookieFavorite();
116
+
117
+ var idx = fav.indexOf(String(id));
118
+
119
+ if (idx !== -1) {
120
+
121
+ fav.splice(idx, 1);
122
+
123
+ saveCookieFavorite(fav);
124
+
125
+ }
126
+
127
+ };
128
+
129
+
130
+
131
+ var saveCookieFavorite = function(favArr) {
132
+
133
+ document.cookie = "favorite=" + favArr.join('/');
134
+
135
+ };
136
+
137
+
138
+
139
+ var loadCookieFavorite = function() {
140
+
141
+ var cookies = document.cookie.split(';')
142
+
143
+
144
+
145
+ for (idx in cookies) {
146
+
147
+ if ( ! cookies.hasOwnProperty(idx)) {
148
+
149
+ continue;
150
+
151
+ }
152
+
153
+
154
+
155
+ if (cookies[idx].indexOf('favorite=') == 0) {
156
+
157
+ var favStr = cookies[idx].substr('favorite='.length);
158
+
159
+ return (favStr.length==0) ? [] : favStr.split('/');
160
+
161
+ }
162
+
163
+ }
164
+
165
+
166
+
167
+ return [];
168
+
169
+ };
170
+
171
+ });
172
+
173
+ ```