teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

誤字脱字の修正

2019/09/03 05:18

投稿

rickey
rickey

スコア24

title CHANGED
File without changes
body CHANGED
@@ -41,7 +41,7 @@
41
41
  クラス構文に全く触れずに、別途関数を作って、セレクトボックスを削除して追加して強引にコードを書きました。
42
42
  クラス構文を利用して、これと同じことはできないでしょうか?
43
43
 
44
- ```htmkl
44
+ ```html
45
45
 
46
46
  <!DOCTYPE html>
47
47
  <html lang="ja">

2

javascriptコードを記載

2019/09/03 05:17

投稿

rickey
rickey

スコア24

title CHANGED
File without changes
body CHANGED
@@ -120,4 +120,200 @@
120
120
  <script src="main.js"></script>
121
121
  </body>
122
122
  </html>
123
+ ```
124
+
125
+ ```javascript
126
+ 'use strict';
127
+ {
128
+
129
+ //参加者タブ-------------------------------------
130
+ //★100)メンバー追加ボタンを押した時------
131
+ var memberListArray = ["主催者"];// これを関数内に入れると、追加していけない。
132
+ const memberAddBtn = document.getElementById('memberAddBtn');//メンバー追加ボタン
133
+ const memberName_id = document.getElementById('memberName');//メンバー入力フォーム
134
+ const memberList_id = document.getElementById('memberList');//メンバーリストを追加していくul要素のid
135
+
136
+
137
+ // 110)メンバーを配列に加える
138
+ function addMemberListArray() {
139
+ memberListArray.push(memberName_id.value);
140
+ console.log(memberListArray);
141
+ memberName_id.value = '';//メンバーの入力欄をクリアする※これをどこに入れるで作動が変わる
142
+ memberName_id.focus();
143
+ }//addMemberListArray
144
+
145
+
146
+ // メンバーリストを管理
147
+ class DisplayMemberList{
148
+ constructor(){
149
+ this.lists=[];
150
+ } //constructor
151
+
152
+ setup(){ //ulにliを追加していく
153
+ this.lists.forEach(index => {
154
+ memberList_id.appendChild(index.getli())
155
+ });
156
+ }//setup
157
+
158
+ //ボタンを押して一行追加する
159
+ go () {
160
+ this.lists.push(new MemberListOneColumn());
161
+ this.setup();
162
+ // console.log(this.lists);
163
+ }//go
164
+ }//displayMemberList class
165
+
166
+
167
+ class MemberListOneColumn {//リストの一行を管理
168
+ constructor() {
169
+ // <li class="memberList_li">
170
+ // <button class="delMember">'x'</button>
171
+ // <div>名前</div>
172
+ // </li>
173
+ this.li = document.createElement('li');
174
+ this.li.classList.add('memberList_li');
175
+
176
+ //deleteボタンの追加
177
+ const deleteBtn = document.createElement('button');
178
+ deleteBtn.classList.add('delMember');
179
+ deleteBtn.textContent = 'x';
180
+ this.li.appendChild(deleteBtn);
181
+
182
+ //テキストの追加
183
+ const div_memberName = document.createElement('div');
184
+ div_memberName.classList.add('div_memberName')
185
+ div_memberName.textContent = memberName_id.value;
186
+ // console.log(memberName_id.value);
187
+ this.li.appendChild(div_memberName);
188
+
189
+ //削除ボタンを押した時
190
+ deleteBtn.addEventListener('click', ()=> {
191
+ var idx=[].indexOf.call(memberList_id.querySelectorAll('li'),this.li);
192
+ displayMemberList.lists.splice(idx,1);
193
+ memberList_id.removeChild(this.li);
194
+ // 配列からもメンバーを削除する
195
+ memberListArray.splice(idx+1,1);
196
+ console.log(memberListArray)
197
+ });
198
+
199
+ }//constructor
200
+
201
+ getli(){
202
+ return this.li;
203
+ }//getli
204
+ }//MemberListOneColumn
205
+
206
+ const displayMemberList = new DisplayMemberList();
207
+ memberAddBtn.addEventListener('click', () => {
208
+ if (memberName_id.value !==''){
209
+ memberAddBtn.classList.remove('disabled');
210
+ }else{
211
+ memberAddBtn.classList.add('disabled');
212
+ };
213
+ if (memberAddBtn.classList.contains('disabled') === true){
214
+ return;
215
+ }
216
+ displayMemberList.go();//メンバーを一覧に表示させる
217
+ addMemberListArray();//110)メンバーを配列に加える
218
+
219
+
220
+ // checkMemberAreaBlank(); //101)名前の空欄チェック→110)メンバーを配列に加える
221
+ })//memberAddBtn.click
222
+
223
+ //項目タブ-----------------------------------------------------------
224
+ const itemAddBtn = document.getElementById('itemAddBtn') ;//メンバー追加ボタン
225
+ const itemList_id = document.getElementById('itemList');//メンバーリストを追加していくul要素のid
226
+
227
+ // // アイテムリストを管理
228
+ class DisplayItemList{
229
+ constructor(){
230
+ this.lists=[];
231
+ } //constructor
232
+
233
+ setup(){ //ulにliを追加していく
234
+ this.lists.forEach(index => {
235
+ itemList_id.appendChild(index.getli())
236
+ });
237
+ }//setup
238
+
239
+ //ボタンを押して一行追加する
240
+ go () {
241
+ this.lists.push(new ItemListOneColumn());
242
+ this.setup();
243
+ console.log(this.lists);
244
+ }//go
245
+ }//displayMemberList class
246
+
247
+ class ItemListOneColumn {//リストの一行を管理
248
+ constructor() {
249
+ this.li = document.createElement('li');
250
+ this.li.classList.add('memberList_li');
251
+
252
+ //セレクトボックス(メンバー名の追加)
253
+ const selectMember_tag = document.createElement('select');
254
+ selectMember_tag.classList.add('selectMember');
255
+ //セレクトボックスに追加する選択肢
256
+ for(var i=0;i<memberListArray.length;i++){
257
+ const optionMember_tag = document.createElement('option')
258
+ optionMember_tag.text = memberListArray[i]; //テキスト値
259
+ selectMember_tag.appendChild(optionMember_tag);
260
+ }
261
+ this.li.appendChild(selectMember_tag);
262
+
263
+ //金額入力項目の追加
264
+ const input_itemPrice = document.createElement('input');
265
+ input_itemPrice.classList.add('oneItemPrice');
266
+ input_itemPrice.placeholder = '金額'
267
+ this.li.appendChild(input_itemPrice);
268
+
269
+ });
270
+
271
+ }//constructor
272
+
273
+ getli(){
274
+ return this.li;
275
+ }//getli
276
+ }//MemberListOneColumn
277
+
278
+ const displayItemList = new DisplayItemList();
279
+ itemAddBtn.addEventListener('click', () => {
280
+ displayItemList.go();//アイテムを一覧に表示させる
281
+ })//memberAddBtn.click
282
+
283
+ //テストボタン処理----------------------------------------------------------
284
+ const testBtn = document.getElementById('testBtn');
285
+ const selectMember = document.getElementsByClassName('selectMember')//該当の項目
286
+ testBtn.addEventListener('click',() => {
287
+
288
+
289
+ for(let item_j = 0; item_j < selectMember.length; item_j++){
290
+ var idx = selectMember[item_j].selectedIndex; //インデックス番号を取得
291
+ var who = selectMember[item_j].options[idx].text;//選ばれている人の名前
292
+
293
+ //一度セレクトボックスを空にしないと、メンバーがどんどん追加されてしまう。
294
+ for(let i = 0; i < selectMember[item_j].options.length + 100; i++) {
295
+ selectMember[item_j].options[0]=null
296
+ }
297
+
298
+ // セレクトボックスに新しい配列の内容を入れる
299
+ for(let i = 0; i < memberListArray.length; i++) {
300
+ const option_tag = document.createElement('option')
301
+ option_tag.text = memberListArray[i]
302
+ selectMember[item_j].appendChild(option_tag);
303
+ }
304
+
305
+ // もともとのテキストボックスの選択肢になるようにする
306
+ var options = document.getElementsByClassName('selectMember')[item_j].options;
307
+ for(var i = 0; i < options.length; i++){
308
+ console.log(options[i].text)
309
+ console.log(who)
310
+ if ( options[i].text === who ){
311
+ options[i].selected = true;
312
+ break;
313
+ };
314
+ };
315
+ }//項目の数だけループ
316
+ });
317
+
318
+ }//javascript
123
319
  ```

1

htmlコードを追加

2019/09/03 05:14

投稿

rickey
rickey

スコア24

title CHANGED
File without changes
body CHANGED
@@ -39,4 +39,85 @@
39
39
  (2)
40
40
  セレクトボックスの作成をクラス構文で行っているのですが、
41
41
  クラス構文に全く触れずに、別途関数を作って、セレクトボックスを削除して追加して強引にコードを書きました。
42
- クラス構文を利用して、これと同じことはできないでしょうか?
42
+ クラス構文を利用して、これと同じことはできないでしょうか?
43
+
44
+ ```htmkl
45
+
46
+ <!DOCTYPE html>
47
+ <html lang="ja">
48
+ <head>
49
+ <meta charset="utf-8">
50
+ <title>Tab Menu</title>
51
+ <link rel="stylesheet" href="styles.css">
52
+ </head>
53
+ <body>
54
+ <div class="container">
55
+ <ul class="menu">
56
+ <li><a href="#" class="active" data-id="participant_tab"></a></li>
57
+ <li><a href="#" data-id="item_tab"></a></li>
58
+ <li><a href="#" data-id="result_tab"></a></li>
59
+ </ul>
60
+
61
+ <!--1)参加者--------------------------------------------->
62
+ <section class="content active" id="participant_tab">
63
+
64
+ <div class="member_area">
65
+ <div class="subTitle">立て替えくれた人</div>
66
+ <div class="add_member_area">
67
+ <input type="text" id="memberName" placeholder="名前を入力">
68
+ <button id="memberAddBtn" class="disabled">追加</button>
69
+ </div>
70
+
71
+ <div class="member_list_table">
72
+ </div>
73
+
74
+ <ul id="memberList">
75
+ <div>主催者(削除不可)</div>
76
+ <!--
77
+ <li class="memberList_li">
78
+ <button class="delMember">'x'</button>
79
+ <div class="div_memberName">名前</div>
80
+ </li>
81
+ -->
82
+ </ul>
83
+ </div>
84
+
85
+ </section>
86
+ <!--2)項目----------------------------------------------->
87
+ <section class="content" id="item_tab">
88
+ <div class="add_item_btn_area">
89
+ <div>立て替え項目</div>
90
+ <div id='itemBtnArea'>
91
+ <button id="itemAddBtn">項目を追加する</button>
92
+ </div>
93
+
94
+ <div class="add_item">
95
+
96
+ <ul id="itemList">
97
+ <!--
98
+ <li>
99
+ <button class="delMember">×</button>
100
+ <select class="selectMember">
101
+ <option>テスト</option>
102
+ <option>テスト</option>
103
+ </select>
104
+ <input class="oneItemName" placeholder="項目">
105
+ <input class="oneItemPrice" placeholder="金額">
106
+ </li>
107
+ -->
108
+ </ul>
109
+
110
+ </div>
111
+ </div>
112
+ <button id="testBtn">項目一覧のセレクトボックスに新しい参加者(配列)の名前を追加する</button>
113
+ </section>
114
+ <!--3)計算結果----------------------------------------------->
115
+ <section class="content" id="result_tab">
116
+
117
+ </section>
118
+ </div>
119
+
120
+ <script src="main.js"></script>
121
+ </body>
122
+ </html>
123
+ ```