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

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

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

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

Q&A

解決済

2回答

1571閲覧

引数の設定がうまくいきません。

azxsedcvfr

総合スコア12

JavaScript

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

0グッド

0クリップ

投稿2016/04/26 08:53

編集2016/04/26 09:30

###前提・実現したいこと
簡単なタスクリストを作っています。

登録ボタンを押すことで、タスクリストに登録されます。
登録したタスクには優先度セレクトボックスと完了ボタンが付きます。
3択の優先度セレクトボックスを選ぶことでタスクの色が決まります。
(今すぐは赤、後では黄、時間があればは青)

また登録した後もそれぞれのタスクの横についたセレクトボックスの優先度を変更すると
それに伴い、タスクの色も変わる。(例.今すぐ→後で に変更すると 赤→黄にタスクの色が変わる)

タスクについた完了ボタンを押すことで
タスクはタスクリストから完了リストに移動します。
またこの時セレクトボックスと完了ボタンは削除されます。

こういった機能のタスクリストを作ろうとしています。

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

登録したタスクのセレクトボックスの優先度を変更するとタスクの色は変わらず↓下記エラーが出る。 practice.js:56 Uncaught TypeError: Cannot read property 'style' of undefined 登録したタスクの完了ボタンを押すとセレクトボックスは削除されず↓下記エラーが出る。 practice.js:38 Uncaught TypeError: Cannot read property 'removeChild' of undefined

###該当のソースコード

JavaScript

1var TaskRegister = { /*全体まとめ*/ 2 init: function init() { 3 var input = document.getElementById('task'); 4 var selector = document.getElementById('priority'); 5 var btn = document.getElementById('registration'); 6 7 btn.addEventListener('click', function (select){ 8 var color = Priority.getColor(selector.value); 9 var task = Task.create(input.value, color); 10 List.addTask(task); 11 }); 12 } 13}; 14 15var Task = { /*登録ボタン関連*/ 16 create: function create(text, color) { 17 var item = document.createElement('li'); 18 var btn = Button.create(item); 19 var select = SelectClone.clone(); 20 21 item.innerHTML = text; 22 item.appendChild(select); 23 item.style.color = color; 24 item.appendChild(btn); 25 return item; 26 } 27}; 28 29var Button = { /*完了ボタン関連*/ 30 create: function create(task, select, item) { 31 var btn = document.createElement('button'); 32 btn.innerHTML = '完了'; 33 34 btn.addEventListener('click', function (select) { 35 List.removeTask(task); 36 List.addDone(task); 37 task.removeChild(btn); 38 item.removeChild(select); 39 }); 40 return btn; 41 } 42}; 43 44var SelectClone = { /*クローン関連*/ 45 clone: function clone (item) { 46 var priority = document.getElementById("priority"); 47 var selectClone = priority.cloneNode(true); 48 49 for (var i = 0; i < selectClone.children.length; i++) { 50 if (priority.value === selectClone.children[i].value) { 51 selectClone.children[i].selected = true; 52 } 53 } 54 55 selectClone.addEventListener("change", function (event, item) { 56 item.style.color = Priority.getColor(event.target.value); 57 }); 58 return selectClone; 59 } 60}; 61 62var List = { /*リスト関連*/ 63 addTask: function add(task) { 64 document.getElementById('taskList').appendChild(task); 65 }, 66 67 removeTask: function remove(task) { 68 document.getElementById('taskList').removeChild(task); 69 }, 70 71 addDone: function add(task) { 72 document.getElementById('doneList').appendChild(task); 73 } 74}; 75 76 77var Priority = { /*優先度の色*/ 78 getColor: function getColor(value) { 79 switch ( Number(value) ) { 80 case 1: return '#f62'; 81 case 2: return '#fc0'; 82 case 3: return '#0af'; 83 } 84 } 85}; 86 87window.addEventListener('load', TaskRegister.init); 88

###試したこと
引数の設定がうまくいっていないと考え、必要な仮引数の設定を試行錯誤したがうまくいかなったです。

###補足情報(言語/FW/ツール等のバージョンなど)
JavaScript

初歩的な問題かと思いますが、ここ数日つまづいています。
よろしくお願いいたします。

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

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

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

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

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

kei344

2016/04/26 09:27

前提の前部分にコードが残っています。「該当のソースコード」と同じようなのですが、関係があるコードでしょうか。
guest

回答2

0

tkturbo さんの指摘部分と、下記部分を確認してください。

addEventListener に渡す関数に自由に引数を与えることはできません。

JavaScript

1// selectClone.addEventListener("change", function (event, item) { 2// ↓ 3selectClone.addEventListener( "change", function ( event ) { 4

無くてもここでは動くと思いますよ。

投稿2016/04/26 09:34

編集2016/04/26 09:36
kei344

総合スコア69398

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

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

azxsedcvfr

2016/04/27 00:11

addEventListener に引数を渡せないことを今回知りました!おかげで解決できました! ありがとうございます。
guest

0

ベストアンサー

javascript

1var Task = { /*登録ボタン関連*/ 2 create: function create(text, color) { 3 var item = document.createElement('li'); 4 var btn = Button.create(item); 5 var select = SelectClone.clone();

「Button.create()」は引数3つ必要だけど、ここでは渡してませんね。
「SelectClone.clone()」は引数渡しされた値を操作してるけど、ここでは渡してませんね。

投稿2016/04/26 09:25

tkturbo

総合スコア5572

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

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

azxsedcvfr

2016/04/27 00:10

解決できました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問