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

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

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

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

JavaScript

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

Q&A

解決済

1回答

2265閲覧

Javascript 最新順に表示、何もない場合の時のメッセージ表示尚且つ画像を渡されたらメッセッジーは表示されないで画像が表示される

hyskyo

総合スコア79

Cookie

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

JavaScript

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

0グッド

0クリップ

投稿2015/10/18 00:58

編集2015/10/19 12:24

最終的にしたいこと:
1,一覧をページに
まだ何も保存されていなかった場合にはメッセージのみを表示したいです(例:何もクリックされていません)。尚且つ、逆に画像が渡されたらメッッセージは非表示で画像のみが一覧で表示されるようにしたいです。
2,最新順が一番上に表示されるようにしたいです、補足:例えば:画像が100個あるとして、一番最後に来た画像が一番上に表示されますように;

現状はまだ保存されてない場合は真っ白な画面になってます
下記は登録画面でボタンが押されたら表示する処理のlist.htmlです

<!DOCTYPE html> <html lang="ja"><head> <script src="/js/jquery.cookie.js" charset="euc-jp"></script> <script type="text/javascript" charset="utf-8"> $(function() { $(document).ready( function(){ var ss = $.cookie('favorite');` if (!(ss == true )) { $('#list').text('何もクリックされていません'); } else if (ss = $.cookie('favorite')){ ss = JSON.parse(ss); for (var i = 0; i < fa.length; i++) { ss[i] = ss[i].substring(ss[i].lastIndexOf('_0') + 2, ss[i].length); var d = ss[i].split('_'); $('#list').append($('<img src="' + d[1] + '">'')); }; } }); </script> </head> <body class="index" > <div id="list"> </div> </body> </html>

下記は基本になる登録image.htmlです

<!doctype html> <html lang="ja"> <script> $(function () { $(document).ready( function(){ });

$('img[src="/images/btn_favorite.png"]').click(function () {

var index = $('img[src="/images/btn_favorite.png"]').index(this);
var h2 = $('div.box_text:eq(' + index + ')').children('h2');
var img = $('div.box_main:eq(' + index + ')').find('img');
var src_para = $(this).closest('a').attr('href');

$.cookie.json = true;
var data = $(h2).text() + '_' + './' + img.attr('src');
if ($.cookie('favorite') == null) {
var p = [];
p.push(data);
$.cookie('favorite', JSON.stringify(p), {'expires':7, 'path': '/'});
}
else {
var ss = JSON.parse($.cookie('favorite'));
console.log(ss);
if (ss.indexOf(data) == -1) {
ss.push(data);
}
$.cookie('favorite', JSON.stringify(fa), {'expires':7, 'path': '/'});

}
});
});
</script>

</head> <body> <div class="box_main"> <div class="photo"><a href=""><img src="images/A.jpg" ></a></div> <div class="box_text"> <h2>表品A</h2> </div></div> <table width="100%"> <tbody> <tr> <td width="50%"> <a href="" class="etc_link"><img src="/images/btn_favorite.png"></a> </td> </tr> </tbody> </table> <div class="box_main"> <div class="photo"><a href=""><img src="images/B.jpg" ></a></div> <div class="box_text"> <h2> 商品B</h2> </div></div> <table width="100%"> <tbody> <tr> <td width="50%"> <a href="" class="etc_link"><img src="/images/btn_favorite.png"></a> </td> </tr> </tbody> </table> <div class="box_main"> <div class="photo"><a href=""><img src="images/C.jpg"></a></div> <div class="box_text"> <h2> 商品C</h2> </div></div> <table width="100%"> <tbody> <tr> <td width="50%"> <a href="" class="etc_link"><img src="/images/btn_favorite.png"></a> </td> </tr> </tbody> </table> </html>

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下のように修正してみました。

list.html

<!DOCTYPE html> <html lang="ja"> <head> <script src="./jquery-1.11.3.min.js"></script> <script src="./jquery.cookie.js"></script> <script type="text/javascript" charset="utf-8"> $(function() { $(document).ready( function(){ var ss = $.cookie('favorite'); if (ss == null ) { $('#list').text('何もクリックされていません'); } else { ss = $.cookie('favorite'); ss = JSON.parse(ss); ss = JSON.parse(ss); for (var i = ss.length - 1; i >= 0; i--) { ss[i] = ss[i].substring(ss[i].lastIndexOf('_0') + 2, ss[i].length); var d = ss[i].split('_'); $('#list').append($("<img>").attr("src", d[1])); } } }); }); </script> </head> <body class="index" > <div id="list"> </div> </body> </html>

image.html

<!doctype html> <html lang="ja"> <head> <script src="./jquery-1.11.3.min.js"></script> <script src="./jquery.cookie.js"></script> <script> $(function () { $('img[src="./images/btn_favorite.png"]').click(function () { var index = $('img[src="./images/btn_favorite.png"]').index(this); var h2 = $('div.box_text:eq(' + index + ')').children('h2'); var img = $('div.box_main:eq(' + index + ')').find('img'); $.cookie.json = true; var data = $(h2).text() + '_' + img.attr('src'); if ($.cookie('favorite') == null) { var p = []; p.push(data); $.cookie('favorite', JSON.stringify(p), {'expires':7, 'path': '/'}); } else { var ss = JSON.parse($.cookie('favorite')); console.log(ss); if (ss.indexOf(data) == -1) { ss.push(data); } else { var tsumenaoshi = []; for(var i = 0; i < ss.length; i++) { if(ss[i] != data) { tsumenaoshi.push(ss[i]); } } tsumenaoshi.push(data); ss = tsumenaoshi; } $.cookie('favorite', JSON.stringify(ss), {'expires':7, 'path': '/'}); } return false; }); }); </script> </head> <body> <div class="box_main"> <div class="photo"><a href="javascript:void(0);"><img src="./images/A.png" ></a></div> <div class="box_text"> <h2>表品A</h2> </div> </div> <table width="100%"> <tbody> <tr> <td width="50%"> <a href="" class="etc_link"><img src="./images/btn_favorite.png"></a> </td> </tr> </tbody> </table> <div class="box_main"> <div class="photo"><a href="javascript:void(0);"><img src="./images/B.jpg" ></a></div> <div class="box_text"> <h2> 商品B</h2> </div> </div> <table width="100%"> <tbody> <tr> <td width="50%"> <a href="" class="etc_link"><img src="./images/btn_favorite.png"></a> </td> </tr> </tbody> </table> <div class="box_main"> <div class="photo"><a href="javascript:void(0);"><img src="./images/C.jpg"></a></div> <div class="box_text"> <h2> 商品C</h2> </div> </div> <table width="100%"> <tbody> <tr> <td width="50%"> <a href="" class="etc_link"><img src="./images/btn_favorite.png"></a> </td> </tr> </tbody> </table> </body> </html>

ファイルの配置構造は、

images/   A.png   B.jpg   C.jpg   btn_favorite.png jquery-1.11.3.min.js jquery.cookie.js image.html list.html

また、修正するにあたって、file://ではクッキー管理ができなかったため、
XAMPPを使用し、http://localhost/でやりました。
あと、クッキーの閲覧や削除操作を容易にするため、Chromeの拡張機能の「EditThisCookie」を利用しました。ものすごく便利なのでおすすめです。
イメージ説明

さて、

  • 1.一覧表示について

なんとなくの実装はできていますが、未実装な箇所よりバグな箇所が多々ありました。
不明な変数faとか、ごみ(;` )とか、imgを生成できていないとか、if文で=だったりとか。
そこら辺のバグを修正することで、自然と期待する対応になりました。

  • 2.最新順について

これは期待値を満たせているかわかりませんが、
・list.htmlで登録の降順で出力するようにする。
・image.htmlでクリックしたものは、最後に来るようにする。
という対応を入れました。

投稿2015/10/20 20:52

編集2015/10/20 20:55
TetsujiMiwa

総合スコア1124

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

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

hyskyo

2015/10/21 02:32

ありがとうございます!! 勉強になりました。XAMPPは良さそうですね、パソコンをWindowsに替えたら使ってみたいと思います!!ちなみに、私は今使っているのがMAMPを使っています!! 早速です、一覧ページには思う通り最新順に表示されましたが画像の削除ボタンを押すときに例えば一番下の画像を削除するボタンしても一番上から削除されしまうし逆に一番上の画像の削除ボタンを押すと一番下の画像が削除されてしまいます。 あと画像まだ何もない時のメッセージは表示されませんでした 宜しくお願いします
hyskyo

2015/10/21 02:35

 ちなみに、少しは私の環境に合わせてソースコードをかきえました、下記は全ソースコードです。 list.html: <!DOCTYPE html> <html lang="ja"> <head> <script type="text/javascript" charset="utf-8"> $(function() { $(document).ready( function(){ var ss = $.cookie('favorite'); if (ss == null) { $('#list').text('何もクリックされていません'); } else { ss = $.cookie('favorite'); ss = JSON.parse(ss); for (var i = ss.length -1; i >= 0; i--) { ss[i] = ss[i].substring(ss[i].lastIndexOf('_0') + 2, ss[i].length); var d = ss[i].split('_'); $('#list').append($('<img src="' + d[1] + '"><button class="del">削除</button>')); }; } }); $(document).on('click', '.del', function() { //$('.del').on('click', function() { var index = $('.del').index(this); alert('削除してもいいですか?'); var ss = $.cookie('favorite'); if (ss) { var ss = JSON.parse(ss); ss.splice(index, 1); $.cookie('favorite', JSON.stringify(ss), {'expires':365, 'path': '/'}); location.reload(true); } }); }); </script> </head> <body class="index" > <div id="list"> </div> </body> </html> image.html: <script> $(function () { $(document).ready( function(){ }); $('img[src="/images/btn_favorite.png"]').click(function () { var index = $('img[src="/images/btn_favorite.png"]').index(this); var h2 = $('div.box_text:eq(' + index + ')').children('h2'); var img = $('div.box_main:eq(' + index + ')').find('img'); //var src_para = $(this).closest('a').attr('href'); $.cookie.json = true; var data = $(h2).text() + '_' + './test/hoge/' + img.attr('src'); if ($.cookie('favorite') == null) { var p = []; p.push(data); $.cookie('favorite', JSON.stringify(p), {'expires':365, 'path': '/'}); } else { var ss = JSON.parse($.cookie('favorite')); console.log(ss); if (ss.indexOf(data) == -1) { ss.push(data); } else { var tsumenaoshi = []; for (var i = 0; i < ss.length; i++){ if (ss[i] != data){ tsumenaoshi.push(ss[i]); } } tsumenaoshi.push(data); ss = tsumenaoshi; } $.cookie('favorite', JSON.stringify(ss), {'expires':365, 'path': '/'}); } return false; }); }); </script>
hyskyo

2015/10/21 06:27

何ない時のメッセージですがブラウザーで デバッグでのCookiesのlocalhostでのcookiesを消せば表示されますね!!ここは普通ですか?
hyskyo

2015/10/21 06:29

この、一覧ページで最新順に表示されましたが画像の削除ボタンを押すときに、例えば一番下の画像の削除するボタンを押したら一番上から削除されてしまうし、逆に一番上の画像の削除ボタンを押すと一番下の画像が削除されてしまいます。 これなぜでしょうか?
hyskyo

2015/10/21 09:42 編集

CookieのON , OFFはどうのようにできますか?
hyskyo

2015/10/22 03:12

お願いします!!
hyskyo

2015/10/22 04:17 編集

ボタンのON, OFFができないんです、ご教授お願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問