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

回答編集履歴

1

追記

2021/11/15 05:04

投稿

KAOsaka
KAOsaka

スコア531

answer CHANGED
@@ -49,4 +49,72 @@
49
49
  }));
50
50
  });
51
51
  </script>
52
+ ```
53
+
54
+ ## 追記
55
+
56
+ > この処理は2回までとかもできるのでしょうか?
57
+ > 1を押し1個表示され5を押し5個表示され 3回目以降は押しても表示できなくなる感じです。
58
+
59
+ ボタンを押した回数をどこかに保存しておいて、画像追加処理の部分で判定してください。
60
+
61
+ - [デモ - JSFiddle](https://jsfiddle.net/v6qtpkLb/)
62
+
63
+ ``` html
64
+ <div id="basket" data-image-add-request-count="0"></div>
65
+
66
+ <template id="image-template">
67
+ <img src="https://via.placeholder.com/512/999999/333333/?text=Ringo" style="width: 40px; height: 40px;">
68
+ </template>
69
+
70
+ <button id="button1">
71
+ - 1 -
72
+ </button>
73
+
74
+ <button id="button5">
75
+ - 5 -
76
+ </button>
77
+
78
+ <script>
79
+ const basket = document.querySelector("#basket");
80
+ const imageTemplate = document.querySelector("#image-template");
81
+ const button1 = document.querySelector("#button1");
82
+ const button5 = document.querySelector("#button5");
83
+
84
+ const maxImageAddRequestCount = 2;
85
+
86
+ basket.addEventListener("App.ImageAddRequest", (event) => {
87
+ const imageAddRequestCount = Number.parseInt(basket.dataset.imageAddRequestCount);
88
+
89
+ if (imageAddRequestCount >= maxImageAddRequestCount) {
90
+ return;
91
+ }
92
+
93
+ const imageCount = event.detail.imageCount ?? 0;
94
+
95
+ for (let count = 0; count < imageCount; count++) {
96
+ const image = imageTemplate.content.cloneNode(true);
97
+
98
+ basket.appendChild(image);
99
+ }
100
+
101
+ basket.dataset.imageAddRequestCount = imageAddRequestCount + 1;
102
+ });
103
+
104
+ button1.addEventListener("click", (event) => {
105
+ basket.dispatchEvent(new CustomEvent("App.ImageAddRequest", {
106
+ detail: {
107
+ imageCount: 1,
108
+ },
109
+ }));
110
+ });
111
+
112
+ button5.addEventListener("click", (event) => {
113
+ basket.dispatchEvent(new CustomEvent("App.ImageAddRequest", {
114
+ detail: {
115
+ imageCount: 5,
116
+ },
117
+ }));
118
+ });
119
+ </script>
52
120
  ```