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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

2463閲覧

jQueryでcheckbox:checkedに対して処理を行いたい

thatnaoki

総合スコア32

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2018/10/25 02:29

編集2018/10/25 02:52

前提・実現したいこと

localStorageを使ってメモアプリを作ろうとしています。
jQueryを使って実装していて、作ったメモがテーブル型に並びます。
並んだメモはチェックボックスにチェックを入れてdeleteボタンを押すと、
選択されたメモがlocalStorageからremoveされて、再読込でHTML上でも消えるように実装したいです。

発生している問題・エラーメッセージ

しかし、チェックボックスを入れずにdeleteボタンを押しても、localStorageのメモが削除されてしまいます。

該当のソースコード

HTML

1<!DOCTYPE html> 2<html> 3<head> 4 <meta charset="UTF-8"> 5 <title>MemoPad</title> 6 <script src="js/jquery-2.1.3.min.js"></script> 7 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> 8 <link rel="stylesheet" href="css/style.css"> 9</head> 10 11<body> 12 <header> 13 <h1>MemoPad</h1> 14 </header> 15 16 <div class="container"> 17 <div class="form-container"> 18 <input class="form" id="title" type="text" placeholder="タイトル"> 19 <textarea class="form" id="content" placeholder="メモ内容" cols=30 rows=5></textarea> 20 <div class="button-wrapper"></div> 21 <button class="btn btn-success btn-block" id="speech">speech</button> 22 <button class="btn btn-primary btn-block" id="save">save</button> 23 <button class="btn btn-danger btn-block" id="delete">delete</button> 24 </div> 25 </div> 26 </div> 27 <div class="container"> 28 <table class="table"> 29 <thead> 30 <tr> 31 <th>チェック</th> 32 <th>タイトル</th> 33 <th>メモ内容</th> 34 </tr> 35 </thead> 36 <tbody id="memo-list"> 37 <!-- ここに挿入 --> 38 </tbody> 39 </table> 40 </div> 41 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 42 <script src="js/script.js"></script> 43</body> 44</html>

JavaScript

1// メモ表示 2window.onload = function(){ 3 for(let i = 0; i < localStorage.length; i++) { 4 let key = localStorage.key(i); 5 let value = localStorage.getItem(key); 6 console.log(value); 7 data = JSON.parse(value); 8 console.log(data); 9 $('#memo-list').append( 10 '<tr class="memo" id="memo_' + String(key) + '">' + 11 '<td>' + '<input type="checkbox">' + 12 '</td>' + '<td>' + data.title + '</td>' + 13 '<td>' + data.content + '</td>' + '</tr>' 14 ); 15 } 16}; 17// localstorage用のkeyを作る 18const makeKey = function() { 19 let keys = [0]; 20 for(let i = 0; i < localStorage.length; i++) { 21 keys.push(localStorage.key(i)); 22 } 23 let maxNum = Math.max.apply(null,keys); 24 return 1 + maxNum; 25} 26 27// Save 28$("#save").on('click', function() { 29 let key = makeKey(); 30 console.log(key); 31 // 変数で入力を受け取る 32 const title = $("#title").val(); 33 const content = $("#content").val(); 34 // 連想配列に入れる 35 const data = {title: title, content: content}; 36 // ストレージへ格納 37 localStorage.setItem(key, JSON.stringify(data)); 38 // 入力を消す 39 $("#title").val(""); 40 $("#content").val(""); 41 // アラート 42 alert("Saved!"); 43 // リロード 44 window.location.reload(); 45}); 46 47// delete 48$("#delete").on('click', function() { 49 for(let i = 0; i < localStorage.length; i++) { 50 let key = localStorage.key(i); 51 if ($('#memo_' + key).has("input[type='checkbox']:checked")) { 52 localStorage.removeItem(key) 53 } 54 } 55 window.location.reload(); 56});

試したこと

input[type='checkbox']:checkedの部分が効いてないのかなと思うのですが、
どう書き換えたらよいのかわからず、、ご教授いただけますでしょうか。

補足情報(FW/ツールのバージョンなど)

Chrome
バージョン: 70.0.3538.67(Official Build) (64 ビット)

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

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

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

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

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

guest

回答2

0

こちらが参考になるかと思います。
https://www.ipentec.com/document/javascript-jquery-get-checkbox-value

投稿2018/10/25 03:09

dice142

総合スコア5158

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

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

thatnaoki

2018/10/25 06:01

ありがとうございます!hasをpropに変更したところ動作するようになりました!
guest

0

ベストアンサー

以下でいけそうな気がします。

javascript

1for(let i = 0; i < localStorage.length; i++) { 2 let key = localStorage.key(i); 3 // if ($('#memo_' + key).has("input[type='checkbox']:checked")) { // コメントアウト 4 if ($('#memo_' + key).has($("input[type='checkbox']:checked")).length) { 5 localStorage.removeItem(key) 6 } 7}

投稿2018/10/25 03:30

miyakichi

総合スコア297

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

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

thatnaoki

2018/10/25 06:02

ありがとうございます!lengthを使うと複数のチェックボックスをチェックした時にうまく動作させることが難しく、has()→prop()に変更したところ動作しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問