質問編集履歴

4

追記

2019/08/22 07:22

投稿

Nana66
Nana66

スコア4

test CHANGED
File without changes
test CHANGED
@@ -294,4 +294,8 @@
294
294
 
295
295
  表示の切り替えは動作するのですが、もう一度#allボタンを押しても動作しません。
296
296
 
297
+ jQueryで動的にDOMを生成すると、その要素に対してイベントを生成するには通常の方法ではイベントが効かなくなる、ことは調べてわかりました。
298
+
299
+ この状態からイベントを発生させる方法について、ご助言いただけますと幸いです。
300
+
297
301
  よろしくお願いいたします。

3

追記

2019/08/22 07:22

投稿

Nana66
Nana66

スコア4

test CHANGED
File without changes
test CHANGED
@@ -292,6 +292,6 @@
292
292
 
293
293
  が効かなくなってしまいました。
294
294
 
295
- あいかわらず表示の切り替えは問題なく動作しま
295
+ 表示の切り替えは動作するのですが、もう一度#allボタンを押ても動作しせん
296
296
 
297
297
  よろしくお願いいたします。

2

誤字修正

2019/08/22 07:14

投稿

Nana66
Nana66

スコア4

test CHANGED
File without changes
test CHANGED
@@ -160,7 +160,7 @@
160
160
 
161
161
  //リストの絞り込み
162
162
 
163
- var searchBox = '.contents__search__box';
163
+ var searchBox = '.search__box';
164
164
 
165
165
  var listItem = '.list__item';
166
166
 

1

コードの追記

2019/08/22 07:10

投稿

Nana66
Nana66

スコア4

test CHANGED
File without changes
test CHANGED
@@ -59,3 +59,239 @@
59
59
  素人でお恥ずかしい限りですが、お力をお貸しいただけると幸いです。
60
60
 
61
61
  よろしくお願いいたします。
62
+
63
+
64
+
65
+ ###追記(試したこと)
66
+
67
+ はじめての質問で、勝手がわかっておらず大変失礼いたしました。
68
+
69
+ 上記リンクを参考に、自分で書いたコードを追記します。
70
+
71
+
72
+
73
+ ```HTML
74
+
75
+        <div class="contents-wrapper">
76
+
77
+ <div class="contents-search">
78
+
79
+ <div class="contents-search__wrapper">
80
+
81
+ <button id="all">ALL</button>
82
+
83
+ <div class="search__box">
84
+
85
+ <input type="checkbox" name="category" value="AAA" id="AAA">
86
+
87
+ <label for="AAA">AAA</label>
88
+
89
+ <input type="checkbox" name="category" value="BBB" id="BBB">
90
+
91
+ <label for="BBB">BBB</label>
92
+
93
+ <input type="checkbox" name="category" value="CCC" id="CCC">
94
+
95
+ <label for="CCC">CCC</label>
96
+
97
+ <input type="checkbox" name="category" value="DDD" id="DDD">
98
+
99
+ <label for="DDD">DDD</label>
100
+
101
+ </div>
102
+
103
+ <div class="search__box">
104
+
105
+ <input type="checkbox" name="level" value="high" id="high">
106
+
107
+ <label class="label" for="high">high</label>
108
+
109
+ <input type="checkbox" name="level" value="low" id="low">
110
+
111
+ <label class="label" for="low">low</label>
112
+
113
+ </div>
114
+
115
+ </div>
116
+
117
+ </div>
118
+
119
+           <ul class="contents__list">
120
+
121
+ <li class="list__item" data-category='["AAA"]' data-level='["high"]'></li>
122
+
123
+ <li class="list__item" data-category='["AAA"]' data-level='["low"]'></li>
124
+
125
+ <li class="list__item" data-category='["BBB"]' data-level='["high"]'></li>
126
+
127
+ <li class="list__item" data-category='["BBB"]' data-level='["low"]'></li>
128
+
129
+ <li class="list__item" data-category='["CCC"]' data-level='["high"]'></li>
130
+
131
+ <li class="list__item" data-category='["DDD"]' data-level='["low"]'></li>
132
+
133
+ </ul>
134
+
135
+       </div>
136
+
137
+
138
+
139
+
140
+
141
+ ```
142
+
143
+
144
+
145
+ ```jQuery
146
+
147
+ var defaultHTML = $('.contents-wrapper').html();
148
+
149
+
150
+
151
+ // HTML記述を初期状態に戻す
152
+
153
+ $('#all').on('click', function(){
154
+
155
+ $('.contents-wrapper').html(defaultHTML);
156
+
157
+ });
158
+
159
+
160
+
161
+ //リストの絞り込み
162
+
163
+ var searchBox = '.contents__search__box';
164
+
165
+ var listItem = '.list__item';
166
+
167
+ var hideClass = 'is-hide';
168
+
169
+
170
+
171
+ $(document).on('change', searchBox + ' input', function() {
172
+
173
+ search_filter();
174
+
175
+ });
176
+
177
+
178
+
179
+ $('label').on('click', function(){
180
+
181
+ $(this).toggleClass('is-active');
182
+
183
+ });
184
+
185
+
186
+
187
+ function search_filter() {
188
+
189
+ $(listItem).removeClass(hideClass);
190
+
191
+ for (var i = 0; i < $(searchBox).length; i++) {
192
+
193
+ var name = $(searchBox).eq(i).find('input').attr('name');
194
+
195
+ var searchData = get_selected_input_items(name);
196
+
197
+ if(searchData.length === 0) {
198
+
199
+ continue;
200
+
201
+ }
202
+
203
+ for (var j = 0; j < $(listItem).length; j++) {
204
+
205
+ var itemData = get_setting_values_in_item($(listItem).eq(j), name);
206
+
207
+ var check = array_match_check(itemData, searchData);
208
+
209
+ if(!check) {
210
+
211
+ $(listItem).eq(j).addClass(hideClass);
212
+
213
+ }
214
+
215
+ }
216
+
217
+ }
218
+
219
+ }
220
+
221
+
222
+
223
+ function get_selected_input_items(name) {
224
+
225
+ var searchData = [];
226
+
227
+ $('[name=' + name + ']:checked').each(function() {
228
+
229
+ searchData.push($(this).val());
230
+
231
+ });
232
+
233
+ return searchData;
234
+
235
+ }
236
+
237
+
238
+
239
+ function get_setting_values_in_item(target, data) {
240
+
241
+ var itemData = target.data(data);
242
+
243
+ if(!Array.isArray(itemData)) {
244
+
245
+ itemData = [itemData];
246
+
247
+ }
248
+
249
+ return itemData;
250
+
251
+ }
252
+
253
+
254
+
255
+ function array_match_check(arr1, arr2) {
256
+
257
+ var arrCheck = false;
258
+
259
+ for (var i = 0; i < arr1.length; i++) {
260
+
261
+ if(arr2.indexOf(arr1[i]) >= 0) {
262
+
263
+ arrCheck = true;
264
+
265
+ break;
266
+
267
+ }
268
+
269
+ }
270
+
271
+ return arrCheck;
272
+
273
+ }
274
+
275
+ ```
276
+
277
+
278
+
279
+ ALLをクリックで、何にもis-hideクラスがついていない、元のhtmlに書き換えるようにしました。
280
+
281
+ これで、表示の切り替えの実装はできたのですが、$('.contents-wrapper').html(defaultHTML); で元のhtmlに書き換えた後のページで
282
+
283
+ ```jQuery
284
+
285
+ $('label').on('click', function(){
286
+
287
+ $(this).toggleClass('is-active');
288
+
289
+ });
290
+
291
+ ```
292
+
293
+ が効かなくなってしまいました。
294
+
295
+ あいかわらず表示の切り替えは問題なく動作します。
296
+
297
+ よろしくお願いいたします。