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

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

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

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

Q&A

解決済

2回答

1204閲覧

関数内で違う関数から値を受け取りたい。

youyaku

総合スコア2

JavaScript

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

0グッド

0クリップ

投稿2020/06/06 07:55

編集2020/06/06 10:02

前提

・現在タスク管理のプログラムを書いています。
・各タスクに削除ボタンを格納して押した際にそのタスクを削除したいです。
・タスクを追加する際にtrタグが生成される度にtodo.lengthを用いて別々のidを与えました。

実現したいこと

・creteDeleteButton()でtrのidを受け取りたいです。

知りたい事

・改善に必要な知識
・どの様な点が間違っているのか
・必読のサイトなど(自分なりに調べはしましたが解決までいたりませんでした。)

発生している問題

・「タスク追加関数」 の前に 「削除ボタン生成関数」 を実行しているのですが削除ボタン生成関数でタスク追加関数内で定義したtrを受け取りたいのですが関数の実行順番を変えられず受け取れません。

該当のソースコード

function createDeleteButton(){ // const todos = todosPush(); const deleteButton = document.createElement('input'); deleteButton.type = 'button'; deleteButton.value = '削除' //タスクを削除する deleteButton.addEventListener('click' ,()=>{ console.log(tr.id); }) return deleteButton; }
//追加を押したときにタスクを追加する document.getElementById('add-button').addEventListener('click', () =>{ todosPush(); const workButton = createWorkButton(); const deleteButton = createDeleteButton(); tbodyAddTodo(workButton,deleteButton); })
'use strict' const tbody = document.getElementById('tbody'); const addTask = document.getElementById('add-task'); const todos = []; function todosPush(){ const todo = { number:todos.length , task:addTask.value, work:'作業中' } todos.push(todo); return todos; } function createWorkButton(){ const workButton = document.createElement('input'); workButton.type = 'button'; workButton.value = '作業中' return workButton; } function createDeleteButton(){ // const todos = todosPush(); const deleteButton = document.createElement('input'); deleteButton.type = 'button'; deleteButton.value = '削除' //タスクを削除する deleteButton.addEventListener('click' ,()=>{ console.log(tr.id); }) return deleteButton; } function tbodyAddTodo(workButton,deleteButton){ //パーツを作り変数化する const tr = document.createElement('tr'); const tdLength = document.createElement('td') const tdAddTask = document.createElement('td'); const workingTd = document.createElement('td'); workingTd.appendChild(workButton); const deleteTd = document.createElement('td'); deleteTd.appendChild(deleteButton); //パーツを表示する tdLength.textContent = todos.length-1; tdAddTask.textContent = addTask.value; tr.appendChild(tdLength); tr.appendChild(tdAddTask); tr.appendChild(workingTd); tr.appendChild(deleteTd); tr.id = `tr${todos.length-1}`; console.log(tr.id); tbody.appendChild(tr); return tr; } //追加を押したときにタスクを追加する document.getElementById('add-button').addEventListener('click', () =>{ todosPush(); const workButton = createWorkButton(); const deleteButton = createDeleteButton(); tbodyAddTodo(workButton,deleteButton); })

html

1 <!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <title>MENTA課題③</title> 7 <link rel="stylesheet" href="style.css"> 8</head> 9<body> 10 11 <h1>ToDoリスト</h1> 12 <div id="radio-buttons"> 13 <input type="radio">すべて 14 <input type="radio">作業中 15 <input type="radio">完了 16 </div> 17 18 19 <div id="tasks"> 20 <table id="table"> 21 <thead> 22 <tr id="th"> 23 <th>ID</th> 24 <th>コメント</th> 25 <th>状態</th> 26 </tr> 27 </thead> 28 <tbody id="tbody"> 29 </tbody> 30 </table> 31 </div> 32 33 <h2>新規タスクの追加</h2> 34 35 <div id="add-tasks"> 36 <input id="add-task" type="text"> 37 <input id="add-button" type="button" value="追加"> 38 </div> 39 40 <script src="main.js"> 41 </script> 42</body> 43</html>

試したこと

デバッグなどでtrが受け取れているか確認しましたが受け取れていなかったので、問題は 「削除ボタン生成関数」 で値をうけとる所にあります。そこまでは理解しているつもりです。

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

削除ボタンをタスク追加関数内で使うので関数の順番が変えられません。

vsコードを用いています。最新です。

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

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

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

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

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

yambejp

2020/06/06 08:10

現状なにをしたらどうなるという説明が必要かも なにも動作しないので、どこをどう修正すべきかも仕様がわからないと回答がしづらいです
youyaku

2020/06/06 09:57

すみません。htmlを部分だけ切り取り必要な部分だけを表示させたのですが説明が表示されませんでした。 削除するコードが完成されていないから、と言う事ですか?? それともそもそも追加すらできないと言う事ですか??
guest

回答2

0

とりあえず

javascript

1function createDeleteButton(){ 2 const deleteButton = document.createElement('input'); 3 deleteButton.type = 'button'; 4 deleteButton.value = '削除'; 5 deleteButton.addEventListener('click',e=>{ 6 var tr=e.target.closest('tr'); 7 tr.parentNode.removeChild(tr); 8 }) 9 return deleteButton; 10} 11

投稿2020/06/06 08:23

yambejp

総合スコア116443

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

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

youyaku

2020/06/09 05:12

まだeを学習していなかったので学習してみます。 ありがとうございます。
guest

0

ベストアンサー

tbodyAddTodoの中でcreateDeleteButtonを作るように組み替えて、tbodyAddTodoの中でcreateDeleteButtonにtrを引数として渡してはいかがでしょう。

投稿2020/06/06 08:04

kei344

総合スコア69583

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

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

youyaku

2020/06/06 09:58

やってみます。ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問