質問編集履歴

1

質問本文に情報が無いものが含まれていたため、修正しました。

2020/10/24 07:19

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- 再度検索すると以前の検索情報が残り、表示されたままになってしまう(検索時にリセットさせたい
1
+ 検索毎に以前のデータをリセットさせたい
test CHANGED
@@ -2,15 +2,19 @@
2
2
 
3
3
 
4
4
 
5
- vue.jsbootstrapを使用して自作サイトを作成しています。
5
+ vue.jsbootstrap、jsonを使用して自作サイト(スマートフォン版)を作成しています。
6
+
7
+
8
+
6
-
9
+ **<サイト内容>**
7
-
8
-
10
+
9
- 内容は、Selectタグ(見頃、花の名前、場所)のoptionタグのアイテムを選択し、検索ボタンをクリックすると、自作のjsonデータから条件に一致したものを表示させるというものです。
11
+ inputタグのテキスト入力、Selectタグ(見頃、花の名前、場所)のoptionタグのアイテムを選択し、検索ボタンをクリックすると、自作のjsonデータから条件に一致したものを表示させるというものです。
12
+
13
+
14
+
10
-
15
+ **<実現したいこと>**
11
-
12
-
16
+
13
- 実現したいことは、検索時に、以前の検索結果をリセットして表示させないようにしたいです。
17
+ 1度検索したアイテムが再検索時にも引き継がれてしまうため検索毎に、以前の検索結果をリセットして表示させないようにしたいです。
14
18
 
15
19
 
16
20
 
@@ -18,25 +22,23 @@
18
22
 
19
23
 
20
24
 
21
- リセットボタンを作成しクリック時にリセットさせという方法はあったのですが、サイト的にこれ以上ボタンを増やしたくないと考えており
25
+ リセット専用ボタンを作成る方法はあったのですが、サイト的にこれ以上ボタンを増やしたくないと考えております。
22
-
23
-
24
-
26
+
27
+
28
+
25
- 他に方法がありましたら、アドバイス頂けると幸いです。
29
+ 他に方法がありましたら、アドバイス頂けると幸いです。よろしくお願いしますm(__)m
26
-
27
-
28
-
29
- よろしくお願いします。
30
+
30
-
31
-
32
-
31
+
32
+
33
- ### 該当のソースコード(ため、一部省略しています
33
+ ### 該当のソースコード(文字数制限があるため、一部省略)
34
34
 
35
35
 
36
36
 
37
37
  ```html
38
38
 
39
+
40
+
39
- <!DOCTYPE html>
41
+ </html><!DOCTYPE html>
40
42
 
41
43
  <html lang="ja">
42
44
 
@@ -52,10 +54,6 @@
52
54
 
53
55
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
54
56
 
55
- <link rel="stylesheet" href="css/main.css">
56
-
57
- <link rel="stylesheet" href="css/sticky-footer.css">
58
-
59
57
 
60
58
 
61
59
  <title>花ナビ</title>
@@ -68,133 +66,145 @@
68
66
 
69
67
  <div id="flower">
70
68
 
71
- <header>
69
+ <!-- 検索フォーム -->
70
+
72
-
71
+ <section class="search-box container">
72
+
73
+ <div class="row">
74
+
73
- <nav class="navbar navbar-expand-sm navbar-light bg-light">
75
+ <div class="form-group col-4">
74
-
76
+
75
- <a href="#" class="navbar-brand">花ナビ</a>
77
+ <label for="exampleFormControlSelect1">見頃</label>
76
-
77
-
78
-
78
+
79
- <button type="button" class="navbar-toggler" data-toggle="collapse" data-target="#nav-bar">
79
+ <select class="form-control" id="exampleFormControlSelect1" v-model="searchParams.season">
80
+
80
-
81
+ <option value="0">すべて</option>
82
+
83
+ <option value="spring">春の花</option>
84
+
85
+ <option value="summer">夏の花</option>
86
+
87
+ <option value="fall">秋の花</option>
88
+
81
- <span class="navbar-toggler-icon"></span>
89
+ <option value="winter">冬の花</option>
82
-
90
+
83
- </button>
91
+ </select>
84
-
92
+
85
- </nav>
93
+ </div>
94
+
86
-
95
+ <div class="form-group col-4">
96
+
97
+ <label for="exampleFormControlSelect1">花の名前</label>
98
+
99
+ <select class="form-control" id="exampleFormControlSelect1" v-model="searchParams.flowerId">
100
+
101
+ <option value="0">すべて</option>
102
+
103
+ <option value="1">サクラ</option>
104
+
105
+ <option value="2">ネモフィラ</option>
106
+
87
- </header>
107
+ </select>
108
+
109
+ </div>
110
+
111
+ <div class="form-group col-4">
112
+
113
+ <label for="exampleFormControlSelect1">場所</label>
114
+
115
+ <select class="form-control" id="exampleFormControlSelect1" v-model="searchParams.place">
116
+
117
+ <option value="0">すべて</option>
118
+
119
+ <option value="1">北海道</option>
120
+
121
+ <option value="2">東北</option>
122
+
123
+ </select>
124
+
125
+ </div>
126
+
127
+ </div>
128
+
129
+ <input class="form-control" v-model="searchParams.freeword" type="text" placeholder="フリーワード">
130
+
131
+ <div class="py-3">
132
+
133
+ <button class="btn btn-success btn-block" @click="searchSpot()">この条件で検索</button>
134
+
135
+ </div>
136
+
137
+ </section>
88
138
 
89
139
 
90
140
 
141
+ <!-- 架空DOM生成(季節の花/見頃) -->
142
+
91
- <section class="main">
143
+ <section class="flower-item py-2 px-2">
144
+
92
-
145
+ <div class="flower-ttl container mb-3" v-for="season in seasonDatas" v-bind:key="season.id">
146
+
147
+ <div class="row text-center pt-2">
148
+
93
- <h1 class="main-img text-center h2"><strong>\ 花を楽しもう! /</strong></h1>
149
+ <h1 class="col-7 h5" v-bind:name="season.name">{{ season.name }}</h1>
150
+
151
+ <p class="flower-season col-5 p-1 small" v-bind:flowering="season.flowering">{{ season.flowering }}</p>
152
+
153
+ </div>
154
+
155
+ <div class="flower-txt d-flex flex-row">
156
+
157
+ <p class="small" v-bind:desc="season.desc">{{ season.desc }}</p>
158
+
159
+ <img class="ml-2" v-bind:src="season.imgSrc" v-bind:alt="season.name">
160
+
161
+ </div>
162
+
163
+ </div>
94
164
 
95
165
  </section>
96
166
 
167
+
168
+
169
+ <!-- 架空DOM生成(花の名前) -->
170
+
97
- <section class="search-box container">
171
+ <section class="flower-item py-2 px-2">
98
-
172
+
99
- <div class="row">
173
+ <div class="flower-ttl container mb-3" v-for="item in itemDatas" v-bind:key="item.id">
100
-
174
+
101
- <div class="form-group col-4">
175
+ <div class="row text-center pt-2">
102
-
103
- <label for="exampleFormControlSelect1">見頃</label>
176
+
104
-
105
- <select class="form-control" id="exampleFormControlSelect1" v-model="searchParams.season">
177
+ <h1 class="col-7 h5" v-bind:name="item.name">{{ item.name }}</h1>
106
-
107
- <option value="0">すべて</option>
178
+
108
-
109
- <option value="spring">春の花</option>
179
+ <p class="flower-season col-5 p-1 small" v-bind:flowering="item.flowering">{{ item.flowering }}</p>
110
-
111
- <option value="summer">夏の花</option>
180
+
112
-
113
- <option value="fall">秋の花</option>
114
-
115
- <option value="winter">冬の花</option>
116
-
117
- </select>
118
-
119
- </div>
181
+ </div>
120
-
182
+
121
- <div class="form-group col-4">
183
+ <div class="flower-txt d-flex flex-row">
122
-
184
+
123
- <label for="exampleFormControlSelect1">花の名前</label>
185
+ <p class="small" v-bind:desc="item.desc">{{ item.desc }}</p>
124
-
186
+
125
- <select class="form-control" id="exampleFormControlSelect1" v-model="searchParams.flowerId">
187
+ <img class="ml-2" v-bind:src="item.imgSrc" v-bind:alt="item.name">
126
-
127
- <option value="0">すべて</option>
188
+
128
-
129
- <option value="1">サクラ</option>
130
-
131
- <option value="2">ネモフィラ</option>
132
-
133
- <option value="3">シバザクラ</option>
134
-
135
- <option value="4">ロベリア</option>
136
-
137
- <option value="5">オステオスペルマム</option>
138
-
139
- <option value="6">クリスマスローズ</option>
140
-
141
- </select>
142
-
143
- </div>
189
+ </div>
144
-
145
- <div class="form-group col-4">
146
-
147
- <label for="exampleFormControlSelect1">場所</label>
148
-
149
- <select class="form-control" id="exampleFormControlSelect1" v-model="searchParams.place">
150
-
151
- <option value="0">すべて</option>
152
-
153
- <option value="1">北海道</option>
154
-
155
- <option value="2">東北</option>
156
-
157
- <option value="3">甲信越、北陸</option>
158
-
159
- <option value="4">関東</option>
160
-
161
- <option value="5">関西</option>
162
-
163
- <option value="6">四国</option>
164
-
165
- <option value="7">中国</option>
166
-
167
- <option value="8">九州</option>
168
-
169
- <option value="9">沖縄</option>
170
-
171
- </select>
172
-
173
- </div>
174
-
175
- </div>
176
-
177
- <div class="py-3">
178
-
179
- <button class="btn btn-success btn-block" @click="searchSpot()">この条件で検索</button>
180
190
 
181
191
  </div>
182
192
 
183
193
  </section>
184
194
 
185
-
186
-
195
+
196
+
187
- <!-- 架空DOM生成(花の名前) -->
197
+ <!-- 架空DOM生成(フリーワード) -->
188
198
 
189
199
  <section class="flower-item py-2 px-2">
190
200
 
191
- <div class="flower-ttl container mb-3" v-for="item in itemDatas" v-bind:key="item.id">
201
+ <div class="flower-ttl container mb-3" v-for="item in itemWordDatas" v-bind:key="item.id">
192
202
 
193
203
  <div class="row text-center pt-2">
194
204
 
195
205
  <h1 class="col-7 h5" v-bind:name="item.name">{{ item.name }}</h1>
196
206
 
197
- <p class="flower-season col-5 p-1 small" v-bind:flowering ="item.flowering">{{ item.flowering }}</p>
207
+ <p class="flower-season col-5 p-1 small" v-bind:flowering="item.flowering">{{ item.flowering }}</p>
198
208
 
199
209
  </div>
200
210
 
@@ -210,136 +220,88 @@
210
220
 
211
221
  </section>
212
222
 
223
+
224
+
225
+ <!-- 架空DOM生成(場所) -->
226
+
227
+ <section class="flowerSpot container p-4" v-for="spot in spotDatas" v-bind:key="spot.id">
228
+
229
+ <!-- カルーセル作成 -->
230
+
231
+ <div id="example-3" class="carousel slide" data-ride="false" style="width:400px">
232
+
233
+ <ol class="carousel-indicators">
234
+
235
+ <li data-target="#example-3" data-slide-to="0" class="active"></li>
236
+
237
+ <li data-target="#example-3" data-slide-to="1"></li>
238
+
239
+ <li data-target="#example-3" data-slide-to="2"></li>
240
+
241
+ </ol>
242
+
243
+ <div class="carousel-inner">
244
+
245
+ <div class="carousel-item active">
246
+
247
+ <img v-bind:src="spot.imgSrc_1" v-bind:alt="spot.imgAlt_1" width="330" height="180">
248
+
249
+ </div>
250
+
251
+ <div class="carousel-item">
252
+
253
+ <img v-bind:src="spot.imgSrc_2" v-bind:alt="spot.imgAlt_2" width="330" height="180">
254
+
255
+ </div>
256
+
257
+ <div class="carousel-item">
258
+
259
+ <img v-bind:src="spot.imgSrc_3" v-bind:alt="spot.imgAlt_3" width="330" height="180">
260
+
261
+ </div>
262
+
263
+ </div>
264
+
265
+ </div>
266
+
267
+ <div class="flowerSpot-ttl">
268
+
269
+ <h1 class="mb-0 pt-2 h6">{{ spot.title }}</h1>
270
+
271
+ </div>
272
+
273
+ <div class="flowerSpot-url">
274
+
275
+ <a v-bind:href="spot.url" target="_blank" class="mb-1">{{ spot.url }}</a>
276
+
277
+ </div>
278
+
279
+ <div class="flowerSpot-access">
280
+
281
+ <p class="small my-1">{{ spot.access }}</p>
282
+
283
+ </div>
284
+
285
+ <div class="flowerSpot-desc">
286
+
287
+ <p class="small m-0 pt-2">{{ spot.desc }}</p>
288
+
289
+ </div>
290
+
291
+ </section>
292
+
213
293
 
214
294
 
215
- <!-- 架空DOM生成(見頃) -->
216
-
217
- <section class="flower-item py-2 px-2">
218
-
219
- <div class="flower-ttl container mb-3" v-for="season in seasonDatas" v-bind:key="season.id">
220
-
221
- <div class="row text-center pt-2">
222
-
223
- <h1 class="col-7 h5" v-bind:name="season.name">{{ season.name }}</h1>
224
-
225
- <p class="flower-season col-5 p-1 small" v-bind:flowering ="season.flowering">{{ season.flowering }}</p>
226
-
227
- </div>
228
-
229
- <div class="flower-txt d-flex flex-row">
230
-
231
- <p class="small" v-bind:desc="season.desc">{{ season.desc }}</p>
232
-
233
- <img class="ml-2" v-bind:src="season.imgSrc" v-bind:alt="season.name">
234
-
235
- </div>
236
-
237
- </div>
238
-
239
- </section>
240
-
241
-
242
-
243
- <!-- 架空DOM生成(場所) -->
244
-
245
- <section class="flowerSpot container p-4" v-for="spot in spotDatas" v-bind:key="spot.id">
246
-
247
- <!--カルーセル作成中-->
248
-
249
- <div id="example-3" class="carousel slide" data-ride="false" style="width:400px">
250
-
251
- <ol class="carousel-indicators">
252
-
253
- <li data-target="#example-3" data-slide-to="0" class="active"></li>
254
-
255
- <li data-target="#example-3" data-slide-to="1"></li>
256
-
257
- <li data-target="#example-3" data-slide-to="2"></li>
258
-
259
- </ol>
260
-
261
- <div class="carousel-inner">
262
-
263
- <div class="carousel-item active">
264
-
265
- <img v-bind:src="spot.imgSrc_1" v-bind:alt="spot.imgAlt_1" width="330" height="180">
266
-
267
- </div>
268
-
269
- <div class="carousel-item">
270
-
271
- <img v-bind:src="spot.imgSrc_2" v-bind:alt="spot.imgAlt_2" width="330" height="180">
272
-
273
- </div>
274
-
275
- <div class="carousel-item">
276
-
277
- <img v-bind:src="spot.imgSrc_3" v-bind:alt="spot.imgAlt_3" width="330" height="180">
278
-
279
- </div>
280
-
281
- </div>
282
-
283
- </div>
284
-
285
-
286
-
287
- <div class="flowerSpot-ttl">
288
-
289
- <h1 class="mb-0 pt-2 h6">{{ spot.title }}</h1>
290
-
291
- </div>
292
-
293
- <div class="flowerSpot-url">
294
-
295
- <a v-bind:href="spot.url" target="_blank" class="mb-1">{{ spot.url }}</a>
296
-
297
- </div>
298
-
299
- <div class="flowerSpot-access">
300
-
301
- <p class="small my-1">{{ spot.access }}</p>
302
-
303
- </div>
304
-
305
- <div class="flowerSpot-desc">
306
-
307
- <p class="small m-0 pt-2">{{ spot.desc }}</p>
308
-
309
- </div>
310
-
311
- </section>
312
-
313
-
314
-
315
- <footer class="footer">
316
-
317
- <div class="container">
318
-
319
- <p class="text-muted">©2020 hana_nav.</p>
320
-
321
- </div>
322
-
323
- </footer>
324
-
325
295
  </div>
326
296
 
327
297
  <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
328
298
 
329
-
330
-
331
299
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js"></script>
332
300
 
333
-
334
-
335
301
  <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
336
302
 
337
-
338
-
339
303
  <script defer src="https://use.fontawesome.com/releases/v5.7.2/js/all.js"></script>
340
304
 
341
-
342
-
343
305
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
344
306
 
345
307
  <script src="js/main.js"></script>
@@ -350,10 +312,108 @@
350
312
 
351
313
  </html>
352
314
 
353
-
354
-
355
315
  ```
356
316
 
317
+ ```js
318
+
319
+ new Vue({
320
+
321
+ el: "#flower",
322
+
323
+ data: {
324
+
325
+ searchParams: {
326
+
327
+ season: '0',
328
+
329
+ flowerId: '0',
330
+
331
+ place: '0',
332
+
333
+ freeword: null,
334
+
335
+ },
336
+
337
+ seasonDatas: [],
338
+
339
+ itemDatas: [],
340
+
341
+ spotDatas: [],
342
+
343
+ itemWordDatas: [],
344
+
345
+ },
346
+
347
+
348
+
349
+ methods: {
350
+
351
+ // 検索ボタンクリック時に作動
352
+
353
+ searchSpot() {
354
+
355
+ // 「フリーワード(item.json用)」での検索表示
356
+
357
+ $.getJSON("json/item.json", (data) => {
358
+
359
+
360
+
361
+ const result = data.filter((v) => {
362
+
363
+ return v.name.includes(this.searchParams.freeword);
364
+
365
+ });
366
+
367
+ this.itemWordDatas = result;
368
+
369
+ });
370
+
371
+
372
+
373
+ // 「季節の花」と「見頃」での検索表示
374
+
375
+ $.getJSON("json/item.json", (data) => {
376
+
377
+
378
+
379
+ const result = data.filter((v) => {
380
+
381
+ return v.season === this.searchParams.season;
382
+
383
+ });
384
+
385
+ this.seasonDatas = result;
386
+
387
+ });
388
+
389
+
390
+
391
+ // 「花の名前」での検索表示
392
+
393
+ $.getJSON("json/item.json", (data) => {
394
+
395
+
396
+
397
+ const result = data.filter((v) => {
398
+
399
+ return v.id === Number(this.searchParams.flowerId);
400
+
401
+ });
402
+
403
+ this.itemDatas = result;
404
+
405
+ });
406
+
407
+ },
408
+
409
+ },
410
+
411
+ });
412
+
413
+
414
+
415
+ ```
416
+
357
417
  ```itemJson
358
418
 
359
419
  [
@@ -368,7 +428,7 @@
368
428
 
369
429
  "flowering": "3月上旬〜4月下旬",
370
430
 
371
- "desc": "サクラは卒業から入学の時期に咲く、日本の春を代表する樹木です。特徴として開花している花は比較的短い枝についています。花の色は白や薄桃色、濃い桃色などをしており、花びらも一重や八重があります。また、桜の種類によっては、赤い果実(さくらんぼ)を6月頃付けるものもあります。",
431
+ "desc": "サクラは卒業から入学の時期に咲く、日本の春を代表する樹木です。",
372
432
 
373
433
  "imgSrc": "images/flower_item/img_01.jpg"
374
434
 
@@ -384,7 +444,7 @@
384
444
 
385
445
  "season": "spring",
386
446
 
387
- "desc": "ネモフィラは森の妖精のような、澄んだブルーの花が愛らしく、春の花壇やコンテナの寄植えなどに多く利用される人気の花です。細かく切れ込んだ葉が密に茂り、自然に分枝して咲きながら大きくこんもりと成長します。",
447
+ "desc": "ネモフィラは森の妖精のような、澄んだブルーの花",
388
448
 
389
449
  "imgSrc": "images/flower_item/img_02.jpg"
390
450
 
@@ -422,7 +482,7 @@
422
482
 
423
483
  "access": "〒071-0704 北海道空知郡中富良野町基線北15",
424
484
 
425
- "desc": "ラベンダーが織りなすグラデーションが魅力的な花畑や、七色の花々を敷き詰めた色彩豊かな花畑など、季節ごとに見頃が異なる12の花畑が広がっています園内には、雄大な十勝岳連峰を眺められるテラスや、食事やソフトクリームなどのスイーツを提供しているカフェも複数あり、ひと休みしながらゆっくりと花巡りが楽しめます。"
485
+ "desc": "ラベンダーが織りなすグラデーションが魅力的な花畑。"
426
486
 
427
487
  },
428
488
 
@@ -450,10 +510,12 @@
450
510
 
451
511
  "access": "〒021-0221 岩手県一関市舞川原沢111",
452
512
 
453
- "desc": "山あじさいをメインとした全国的にも珍しい「みちのくあじさい園」は、山あじさい、ウツギ類、エゾあじさい、ガクあじさい、西洋あじさい、玉あじさいなど原種品種数は日本有数を誇り、約400種4万株のあじさいが咲き誇ります約15ヘクタールもの杉林には「くれないコース」と「奥姫コース」「健脚コース」の三つの散策コースがあり、6月下旬頃からの1ヵ月間、多種多様なあじさいを眺めながら散策を楽しむことができます。開花期間に合わせて「みちのくあじさいまつり」も開催され、毎年多くの人々で賑わいます。"
513
+ "desc": "山あじさいをメインとした全国的にも珍しい「みちのくあじさい園」。"
454
514
 
455
515
  }
456
516
 
457
517
  ]
458
518
 
519
+
520
+
459
521
  ```