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

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

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

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

Q&A

解決済

1回答

630閲覧

javascriptのtodoリストで、タスクを2つ以上作らないとチェック時に打ち消し線が表示されない

aki_

総合スコア18

JavaScript

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

0グッド

0クリップ

投稿2020/04/13 10:06

##現象
JavaScriptでtodoリストを作っていますが、タスクを2つ以上作らないとチェックマークを付けた際にに打ち消し線が表示されません。
##現象が発生しているTodoリスト
http://nakatakira.html.xdomain.jp/test/test4/
##手順
1.ADDING TASK欄に、タスクを書き込みます。
2.Enterキーを押下すると、チェックマークとゴミ箱が含まれたタスクが表示されます。
3.チェックマークをチェックしても、打ち消し線は表示されません。
4.2つ以上タスクを作成すると、チェックマークにチェックすると打ち消し線が表示されることを確認しております。

※コンソールにもエラーが表示されないことを確認しております。

JavaScript

1 const addTask = document.getElementById('add'); 2 const list = document.getElementById('todos'); 3 4 addTask.addEventListener('submit', e => { 5 // デフォルトのイベントを無効 6 e.preventDefault(); 7 function createTodoList (task) { 8 // HTMLテンプレートを生成 9 const html = 10 `<ul class="listGroup__item todos__item"> 11 <li class="todo__checkbox"><input type="checkbox" name="taskcheck" ></li> 12 <li class="todo__task">${task}</li> 13 <li class="delete"></li> 14 </ul> 15 `; 16 list.innerHTML += html; 17 } 18 // タスクに入力した値を空白を除外して格納 19 const task = addTask.add.value.trim(); 20 if(task.length) { 21 // Todo List の HTML を生成 22 createTodoList(task); 23 // タスクに入力した文字をクリア 24 addTask.reset(); 25 } 26 const taskCheck = document.forms.todos.taskcheck; 27 for(let i = 0; i < taskCheck.length; i++){ 28 taskCheck[i].addEventListener('click', () => { 29 if(taskCheck[i].checked){ 30 taskCheck[i].parentNode.nextElementSibling.style.textDecoration = 'line-through'; 31 } else { 32 taskCheck[i].parentNode.nextElementSibling.style.textDecoration = 'none'; 33 } 34 }); 35 } 36 }); 37 38 //削除機能。deleteがクラスについている場合(つまりゴミ箱)。 39 list.addEventListener('click', e => { 40 if (e.target.classList.contains('delete')){ 41 e.target.parentElement.remove(); 42 } 43 44 });

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

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

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

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

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

guest

回答1

0

ベストアンサー

28行目でcheckboxを取得していますが、1個の場合はリストで取れません。
taskCheck.lengthがundefinedになるため、29行目のfor文の処理に入りません。

javascript

1const taskCheck = document.forms.todos.taskcheck; 2

document.querySelectorAllでcheckboxを取得すれば1つの場合もNodeListが取れるので動くと思います

投稿2020/04/13 14:32

CaptainRTA

総合スコア136

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

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

aki_

2020/04/14 02:32

ありがとうございます! 上記の場合だと1つではリストで取得できないのですね、知りませんでした。 「document.querySelectorAll("input[type='checkbox']");」のように、 document.querySelectorAllを使用したらうまくいきました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問