質問編集履歴

3

誤字脱字の修正

2019/09/03 05:18

投稿

rickey
rickey

スコア24

test CHANGED
File without changes
test CHANGED
@@ -84,7 +84,7 @@
84
84
 
85
85
 
86
86
 
87
- ```htmkl
87
+ ```html
88
88
 
89
89
 
90
90
 

2

javascriptコードを記載

2019/09/03 05:17

投稿

rickey
rickey

スコア24

test CHANGED
File without changes
test CHANGED
@@ -243,3 +243,395 @@
243
243
  </html>
244
244
 
245
245
  ```
246
+
247
+
248
+
249
+ ```javascript
250
+
251
+ 'use strict';
252
+
253
+ {
254
+
255
+
256
+
257
+ //参加者タブ-------------------------------------
258
+
259
+ //★100)メンバー追加ボタンを押した時------
260
+
261
+ var memberListArray = ["主催者"];// これを関数内に入れると、追加していけない。
262
+
263
+ const memberAddBtn = document.getElementById('memberAddBtn');//メンバー追加ボタン
264
+
265
+ const memberName_id = document.getElementById('memberName');//メンバー入力フォーム
266
+
267
+ const memberList_id = document.getElementById('memberList');//メンバーリストを追加していくul要素のid
268
+
269
+
270
+
271
+
272
+
273
+ // 110)メンバーを配列に加える
274
+
275
+ function addMemberListArray() {
276
+
277
+ memberListArray.push(memberName_id.value);
278
+
279
+ console.log(memberListArray);
280
+
281
+ memberName_id.value = '';//メンバーの入力欄をクリアする※これをどこに入れるで作動が変わる
282
+
283
+ memberName_id.focus();
284
+
285
+ }//addMemberListArray
286
+
287
+
288
+
289
+
290
+
291
+ // メンバーリストを管理
292
+
293
+ class DisplayMemberList{
294
+
295
+ constructor(){
296
+
297
+ this.lists=[];
298
+
299
+ } //constructor
300
+
301
+
302
+
303
+ setup(){ //ulにliを追加していく
304
+
305
+ this.lists.forEach(index => {
306
+
307
+ memberList_id.appendChild(index.getli())
308
+
309
+ });
310
+
311
+ }//setup
312
+
313
+
314
+
315
+ //ボタンを押して一行追加する
316
+
317
+ go () {
318
+
319
+ this.lists.push(new MemberListOneColumn());
320
+
321
+ this.setup();
322
+
323
+ // console.log(this.lists);
324
+
325
+ }//go
326
+
327
+ }//displayMemberList class
328
+
329
+
330
+
331
+
332
+
333
+ class MemberListOneColumn {//リストの一行を管理
334
+
335
+ constructor() {
336
+
337
+ // <li class="memberList_li">
338
+
339
+ // <button class="delMember">'x'</button>
340
+
341
+ // <div>名前</div>
342
+
343
+ // </li>
344
+
345
+ this.li = document.createElement('li');
346
+
347
+ this.li.classList.add('memberList_li');
348
+
349
+
350
+
351
+ //deleteボタンの追加
352
+
353
+ const deleteBtn = document.createElement('button');
354
+
355
+ deleteBtn.classList.add('delMember');
356
+
357
+ deleteBtn.textContent = 'x';
358
+
359
+ this.li.appendChild(deleteBtn);
360
+
361
+
362
+
363
+ //テキストの追加
364
+
365
+ const div_memberName = document.createElement('div');
366
+
367
+ div_memberName.classList.add('div_memberName')
368
+
369
+ div_memberName.textContent = memberName_id.value;
370
+
371
+ // console.log(memberName_id.value);
372
+
373
+ this.li.appendChild(div_memberName);
374
+
375
+
376
+
377
+ //削除ボタンを押した時
378
+
379
+ deleteBtn.addEventListener('click', ()=> {
380
+
381
+ var idx=[].indexOf.call(memberList_id.querySelectorAll('li'),this.li);
382
+
383
+ displayMemberList.lists.splice(idx,1);
384
+
385
+ memberList_id.removeChild(this.li);
386
+
387
+ // 配列からもメンバーを削除する
388
+
389
+ memberListArray.splice(idx+1,1);
390
+
391
+ console.log(memberListArray)
392
+
393
+ });
394
+
395
+
396
+
397
+ }//constructor
398
+
399
+
400
+
401
+ getli(){
402
+
403
+ return this.li;
404
+
405
+ }//getli
406
+
407
+ }//MemberListOneColumn
408
+
409
+
410
+
411
+ const displayMemberList = new DisplayMemberList();
412
+
413
+ memberAddBtn.addEventListener('click', () => {
414
+
415
+ if (memberName_id.value !==''){
416
+
417
+ memberAddBtn.classList.remove('disabled');
418
+
419
+ }else{
420
+
421
+ memberAddBtn.classList.add('disabled');
422
+
423
+ };
424
+
425
+ if (memberAddBtn.classList.contains('disabled') === true){
426
+
427
+ return;
428
+
429
+ }
430
+
431
+ displayMemberList.go();//メンバーを一覧に表示させる
432
+
433
+ addMemberListArray();//110)メンバーを配列に加える
434
+
435
+
436
+
437
+
438
+
439
+ // checkMemberAreaBlank(); //101)名前の空欄チェック→110)メンバーを配列に加える
440
+
441
+ })//memberAddBtn.click
442
+
443
+
444
+
445
+ //項目タブ-----------------------------------------------------------
446
+
447
+ const itemAddBtn = document.getElementById('itemAddBtn') ;//メンバー追加ボタン
448
+
449
+ const itemList_id = document.getElementById('itemList');//メンバーリストを追加していくul要素のid
450
+
451
+
452
+
453
+ // // アイテムリストを管理
454
+
455
+ class DisplayItemList{
456
+
457
+ constructor(){
458
+
459
+ this.lists=[];
460
+
461
+ } //constructor
462
+
463
+
464
+
465
+ setup(){ //ulにliを追加していく
466
+
467
+ this.lists.forEach(index => {
468
+
469
+ itemList_id.appendChild(index.getli())
470
+
471
+ });
472
+
473
+ }//setup
474
+
475
+
476
+
477
+ //ボタンを押して一行追加する
478
+
479
+ go () {
480
+
481
+ this.lists.push(new ItemListOneColumn());
482
+
483
+ this.setup();
484
+
485
+ console.log(this.lists);
486
+
487
+ }//go
488
+
489
+ }//displayMemberList class
490
+
491
+
492
+
493
+ class ItemListOneColumn {//リストの一行を管理
494
+
495
+ constructor() {
496
+
497
+ this.li = document.createElement('li');
498
+
499
+ this.li.classList.add('memberList_li');
500
+
501
+
502
+
503
+ //セレクトボックス(メンバー名の追加)
504
+
505
+ const selectMember_tag = document.createElement('select');
506
+
507
+ selectMember_tag.classList.add('selectMember');
508
+
509
+ //セレクトボックスに追加する選択肢
510
+
511
+ for(var i=0;i<memberListArray.length;i++){
512
+
513
+ const optionMember_tag = document.createElement('option')
514
+
515
+ optionMember_tag.text = memberListArray[i]; //テキスト値
516
+
517
+ selectMember_tag.appendChild(optionMember_tag);
518
+
519
+ }
520
+
521
+ this.li.appendChild(selectMember_tag);
522
+
523
+
524
+
525
+ //金額入力項目の追加
526
+
527
+ const input_itemPrice = document.createElement('input');
528
+
529
+ input_itemPrice.classList.add('oneItemPrice');
530
+
531
+ input_itemPrice.placeholder = '金額'
532
+
533
+ this.li.appendChild(input_itemPrice);
534
+
535
+
536
+
537
+ });
538
+
539
+
540
+
541
+ }//constructor
542
+
543
+
544
+
545
+ getli(){
546
+
547
+ return this.li;
548
+
549
+ }//getli
550
+
551
+ }//MemberListOneColumn
552
+
553
+
554
+
555
+ const displayItemList = new DisplayItemList();
556
+
557
+ itemAddBtn.addEventListener('click', () => {
558
+
559
+ displayItemList.go();//アイテムを一覧に表示させる
560
+
561
+ })//memberAddBtn.click
562
+
563
+
564
+
565
+ //テストボタン処理----------------------------------------------------------
566
+
567
+ const testBtn = document.getElementById('testBtn');
568
+
569
+ const selectMember = document.getElementsByClassName('selectMember')//該当の項目
570
+
571
+ testBtn.addEventListener('click',() => {
572
+
573
+
574
+
575
+
576
+
577
+ for(let item_j = 0; item_j < selectMember.length; item_j++){
578
+
579
+ var idx = selectMember[item_j].selectedIndex; //インデックス番号を取得
580
+
581
+ var who = selectMember[item_j].options[idx].text;//選ばれている人の名前
582
+
583
+
584
+
585
+ //一度セレクトボックスを空にしないと、メンバーがどんどん追加されてしまう。
586
+
587
+ for(let i = 0; i < selectMember[item_j].options.length + 100; i++) {
588
+
589
+ selectMember[item_j].options[0]=null
590
+
591
+ }
592
+
593
+
594
+
595
+ // セレクトボックスに新しい配列の内容を入れる
596
+
597
+ for(let i = 0; i < memberListArray.length; i++) {
598
+
599
+ const option_tag = document.createElement('option')
600
+
601
+ option_tag.text = memberListArray[i]
602
+
603
+ selectMember[item_j].appendChild(option_tag);
604
+
605
+ }
606
+
607
+
608
+
609
+ // もともとのテキストボックスの選択肢になるようにする
610
+
611
+ var options = document.getElementsByClassName('selectMember')[item_j].options;
612
+
613
+ for(var i = 0; i < options.length; i++){
614
+
615
+ console.log(options[i].text)
616
+
617
+ console.log(who)
618
+
619
+ if ( options[i].text === who ){
620
+
621
+ options[i].selected = true;
622
+
623
+ break;
624
+
625
+ };
626
+
627
+ };
628
+
629
+ }//項目の数だけループ
630
+
631
+ });
632
+
633
+
634
+
635
+ }//javascript
636
+
637
+ ```

1

htmlコードを追加

2019/09/03 05:14

投稿

rickey
rickey

スコア24

test CHANGED
File without changes
test CHANGED
@@ -81,3 +81,165 @@
81
81
  クラス構文に全く触れずに、別途関数を作って、セレクトボックスを削除して追加して強引にコードを書きました。
82
82
 
83
83
  クラス構文を利用して、これと同じことはできないでしょうか?
84
+
85
+
86
+
87
+ ```htmkl
88
+
89
+
90
+
91
+ <!DOCTYPE html>
92
+
93
+ <html lang="ja">
94
+
95
+ <head>
96
+
97
+ <meta charset="utf-8">
98
+
99
+ <title>Tab Menu</title>
100
+
101
+ <link rel="stylesheet" href="styles.css">
102
+
103
+ </head>
104
+
105
+ <body>
106
+
107
+ <div class="container">
108
+
109
+ <ul class="menu">
110
+
111
+ <li><a href="#" class="active" data-id="participant_tab"></a></li>
112
+
113
+ <li><a href="#" data-id="item_tab"></a></li>
114
+
115
+ <li><a href="#" data-id="result_tab"></a></li>
116
+
117
+ </ul>
118
+
119
+
120
+
121
+ <!--1)参加者--------------------------------------------->
122
+
123
+ <section class="content active" id="participant_tab">
124
+
125
+
126
+
127
+ <div class="member_area">
128
+
129
+ <div class="subTitle">立て替えくれた人</div>
130
+
131
+ <div class="add_member_area">
132
+
133
+ <input type="text" id="memberName" placeholder="名前を入力">
134
+
135
+ <button id="memberAddBtn" class="disabled">追加</button>
136
+
137
+ </div>
138
+
139
+
140
+
141
+ <div class="member_list_table">
142
+
143
+ </div>
144
+
145
+
146
+
147
+ <ul id="memberList">
148
+
149
+ <div>主催者(削除不可)</div>
150
+
151
+ <!--
152
+
153
+ <li class="memberList_li">
154
+
155
+ <button class="delMember">'x'</button>
156
+
157
+ <div class="div_memberName">名前</div>
158
+
159
+ </li>
160
+
161
+ -->
162
+
163
+ </ul>
164
+
165
+ </div>
166
+
167
+
168
+
169
+ </section>
170
+
171
+ <!--2)項目----------------------------------------------->
172
+
173
+ <section class="content" id="item_tab">
174
+
175
+ <div class="add_item_btn_area">
176
+
177
+ <div>立て替え項目</div>
178
+
179
+ <div id='itemBtnArea'>
180
+
181
+ <button id="itemAddBtn">項目を追加する</button>
182
+
183
+ </div>
184
+
185
+
186
+
187
+ <div class="add_item">
188
+
189
+
190
+
191
+ <ul id="itemList">
192
+
193
+ <!--
194
+
195
+ <li>
196
+
197
+ <button class="delMember">×</button>
198
+
199
+ <select class="selectMember">
200
+
201
+ <option>テスト</option>
202
+
203
+ <option>テスト</option>
204
+
205
+ </select>
206
+
207
+ <input class="oneItemName" placeholder="項目">
208
+
209
+ <input class="oneItemPrice" placeholder="金額">
210
+
211
+ </li>
212
+
213
+ -->
214
+
215
+ </ul>
216
+
217
+
218
+
219
+ </div>
220
+
221
+ </div>
222
+
223
+ <button id="testBtn">項目一覧のセレクトボックスに新しい参加者(配列)の名前を追加する</button>
224
+
225
+ </section>
226
+
227
+ <!--3)計算結果----------------------------------------------->
228
+
229
+ <section class="content" id="result_tab">
230
+
231
+
232
+
233
+ </section>
234
+
235
+ </div>
236
+
237
+
238
+
239
+ <script src="main.js"></script>
240
+
241
+ </body>
242
+
243
+ </html>
244
+
245
+ ```