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

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

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

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

Q&A

解決済

1回答

1849閲覧

リストタグのUp&Down移動をlocalStorageに保存したい。

suisuin

総合スコア17

JavaScript

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

0グッド

0クリップ

投稿2017/02/13 08:54

編集2017/02/13 09:17

繰り返し追加したリストにて、テキストエリアの入力内容は自動で保存できたのですが、リストタグのUp&Downによる移動の並びが保存できず困っています。

初心者で詳しくないのですが恐らく、UPとDOWNボタンでクリックしたときに並びが保存できればOKかと思うのですがうまくいきません。

リストの移動では、Sortableが良く使われているようですが他と組み合わせると動かなかったので下記のコードでは別の手法にしています。

どうかご教授お願いいたします。

<button id="add" class="butt">追加</button> <button id="reset">リセット</button> <table> <ul id="ul_li_SubCategories" class="foo chargeCapturetable margin0"></ul> </table> <button id="upid" class="upbutton">Up</button><button id="downid" class="downbutton">Down</button> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.js"></script> <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script> <script> //リストUpDown $(document).on('click', '.liEllipsis', function(){ $('.selected').removeClass('selected'); $(this).addClass('selected'); }); $('.upbutton').on('click', function () { var $currentElement = $('#ul_li_SubCategories .selected'); moveUp($currentElement); }); $('.downbutton').on('click', function () { var $currentElement = $('#ul_li_SubCategories .selected'); moveDown($currentElement); }); var moveUp = function ($currentElement) { var hook = $currentElement.prev('.liEllipsis'); if (hook.length) { var elementToMove = $currentElement.detach(); hook.before(elementToMove); } }; var moveDown = function ($currentElement) { var hook = $currentElement.next('.liEllipsis'); if (hook.length) { var elementToMove = $currentElement.detach(); hook.after(elementToMove); } }; // //ローカルストレージ var initData = []; var listString = ""; function initialize(){ $.each(initData, function(key, value) { $("#ul_li_SubCategories").prepend('<li class="liEllipsis"><textarea class="taF22 textBox1"></textarea><button class="delete">削除</button></li>'); }); } if (localStorage.getItem("ul_li_SubCategories")) { $("#ul_li_SubCategories").html(localStorage.getItem("ul_li_SubCategories")); } else { initialize(); } $("#add").click(function() { $("#ul_li_SubCategories").prepend('<li class="liEllipsis"><textarea class="taF22 textBox1"></textarea><button class="delete">削除</button></li>'); localStorage.setItem("ul_li_SubCategories", $("#ul_li_SubCategories").html()); }); $("#ul_li_SubCategories").on("keyup", ":input", function(){ $.each($("textarea"), function(key, input){ $(input).text($(input).val()); }); localStorage.setItem("ul_li_SubCategories", $("#ul_li_SubCategories").html()); }); $("#ul_li_SubCategories").on("click", ".delete", function() { $(this).parent().remove(); localStorage.setItem("ul_li_SubCategories", $("#ul_li_SubCategories").html()); }); $("#reset").click(function(){ $("#ul_li_SubCategories").empty(); initialize(); localStorage.setItem("ul_li_SubCategories", $("#ul_li_SubCategories").html()); }); $("#ul_li_SubCategories li").sortable({ cancel: ":input,button,textarea,.liEllipsis", update: function() { localStorage.setItem("ul_li_SubCategories", $("#ul_li_SubCategories").html()); } }); $("#ul_li_SubCategories li").on("focusout", function() { localStorage.setItem("ul_li_SubCategories", $("#ul_li_SubCategories").html()); }); </script>

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

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

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

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

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

guest

回答1

0

ベストアンサー

認識違いでしたらすみません。

「Up」ボタン押下時の関数「moveUp」と
「Down」ボタン押下時の関数「moveDown」に
それぞれ「localStorage.setItem」を追加してあげると、
やりたいことが実現できると思います。
(Up・Down時にlocalStorageに保存)

var moveUp = function ($currentElement) { var hook = $currentElement.prev('.liEllipsis'); if (hook.length) { var elementToMove = $currentElement.detach(); hook.before(elementToMove); // ★↓ここです localStorage.setItem("ul_li_SubCategories", $("#ul_li_SubCategories").html()); } }; var moveDown = function ($currentElement) { var hook = $currentElement.next('.liEllipsis'); if (hook.length) { var elementToMove = $currentElement.detach(); hook.after(elementToMove); // ★↓ここです localStorage.setItem("ul_li_SubCategories", $("#ul_li_SubCategories").html()); } };

 
補足ですが、
「localStorage.setItem("ul_li_SubCategories", $("#ul_li_SubCategories").html());」は
共通ですので関数化することで綺麗に見えると思います。

var moveUp = function ($currentElement) { var hook = $currentElement.prev('.liEllipsis'); if (hook.length) { var elementToMove = $currentElement.detach(); hook.before(elementToMove); // ★↓ここです saveSubCategories(); } }; // ... // ★↓ここです function saveSubCategories() { var html = $("#ul_li_SubCategories").html() localStorage.setItem("ul_li_SubCategories", html); }

投稿2017/02/13 09:33

編集2017/02/13 10:53
_yu_

総合スコア91

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

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

suisuin

2017/02/13 09:58

_yu_さん  関数化して頂いた内容で並び順を保存することができました。 ありがとうございます! 感謝申し上げます。
_yu_

2017/02/13 10:05

追記となります。 「sortable」の話ですが、下記のようにすることで、 私の環境では動きました。 余裕がありましたら、お試しください。 ① jQuery ライブラリの最新化 読み込んでいるライブラリは新しいものを使用してください。 「1.3.2/jquery.min.js」、「1.7.2/jquery-ui.js」、「jquery-latest.min.js」 (jQuery と jQuery.UI の2つがあれば動きます。) ② sortable の示す要素 「sortable」の示す要素は「li」ではなく「ui」自体になります。 誤:$("#ul_li_SubCategories li").sortable({...}); 正:$("#ul_li_SubCategories").sortable({...});
suisuin

2017/02/14 04:17

他との組み合わせというのが、繰り返し追加した複数のテキストエリアの内容をまとめテキストエリアにまとめて取得させたところ、Sortableの何かしらの影響でどっちかが動かなくなりました。いろいろ調べていくうちに、順番に動かすような組み方でないのが原因では?とそこから先はもう出来ないなりに模索して今の形にたどり着きました。その他のjavascriptを全部ひっくるめて質問してしまうと困惑させてしまうと危惧して今回、切り取った形で質問しさせていただきました。 $("#ul_li_SubCategories").sortable(); 質問内容のコード上では動作の確認は出来たのですが、やはり他組んでいるものと合わせると動きませんでした。 Sortableが動けば<li>をドラッグ&ドロップで上下移動が可能になるので魅力があるのですが...このまま製作を進めて納得がいかないとき改めて質問をしよと思います。そのときはまたお力添えいただければ幸いです。 jQuery ライブラリを2.1.0しました。 試行錯誤の残りですね。動作上問題なく安心しました。ご指摘ありがとうございます。
_yu_

2017/02/14 10:39

ご返信ありがとうございます。 私の環境でご記載いただいたソースを動かした際に 「$(...).sortable is not a function」と出ていたので、 そのことかと思っておりました。 何れにせよ、第一段階としてお役に立てることができて幸いです。 私もまだまだ教わることが多い身ですので、 お互い頑張りましょう (^^)
suisuin

2017/02/15 05:51

あ!「$(...).sortable is not a function」は、取り残しでした。今気づきました。見当違いな返信で失礼しました。いろいろ励みなります。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問