回答編集履歴

5

おまけのおまけ追加

2020/02/14 03:40

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
File without changes

4

おまけのおまけ追加

2020/02/14 03:40

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -217,3 +217,45 @@
217
217
  console.log(isValidDate(2000, 4, 32)); // false
218
218
 
219
219
  ```
220
+
221
+
222
+
223
+ ---
224
+
225
+
226
+
227
+ 【おまけのおまけ】 エラーが出たら消えないのでそこも分かる方がいらっしゃったら教えて頂きたいです。
228
+
229
+
230
+
231
+ JavaScriptが出来る事は
232
+
233
+ HTMLの構造をA→Bに書き換えることだけです。
234
+
235
+ 壊したらもう元には戻りません。
236
+
237
+
238
+
239
+ これはJavaScriptが命令型言語なので指示待ち人間なわけですよ。
240
+
241
+ 指示を出すからには、「妥当な日付になったら戻れ!」という指示が必要になります。
242
+
243
+
244
+
245
+ エラーを表示する為に`elm.innerHTML = "エラーですよ"`みたいな事をやってますよね?
246
+
247
+ だから日付が妥当だった場合は、自らの手で`elm.innerHTML = ""`と消さなければなりません。
248
+
249
+ これはjQueryへ移行しても記述が簡素になってちょっと楽になる程度で変わりません。
250
+
251
+
252
+
253
+ 最終的にはテンプレートを渡して、
254
+
255
+ 「Aの変数を見て、Aの変数が変更されたら勝手に最善の形に書き換わってくれ!」という仕組みを構築するのが終着点です。
256
+
257
+ これを実現するのがReactやVue.js等のJSフレームワークを駆使した開発です。
258
+
259
+
260
+
261
+ 恐らく今後の講義として追加されると思うので楽しみにしてください。

3

おまけのおまけ追加

2020/02/14 03:40

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
File without changes

2

おまけ追加

2020/02/14 03:40

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
File without changes

1

おまけ追加

2020/02/14 03:24

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -143,3 +143,77 @@
143
143
  正しい日付ですか?と聞いてfalseが帰ってきたら不正な数値と返すだけなので
144
144
 
145
145
  後々の処理を考えた時は絶対にライブラリ使う方が良いです。
146
+
147
+
148
+
149
+ ---
150
+
151
+
152
+
153
+ 【おまけ】 カイジくんが本当に欲しいのはこっち
154
+
155
+
156
+
157
+ > 年月日の入力をチェックしてエラーを出している
158
+
159
+
160
+
161
+ 閏年なんてどうでも良いんですよ。
162
+
163
+ 妥当な日付か否かが知りたいんでしょ?
164
+
165
+
166
+
167
+ まぁ、これ一択でしょうね。
168
+
169
+ 数値へのキャストは[Number](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Number)を使いましょう。
170
+
171
+
172
+
173
+ ```js
174
+
175
+ // 文字列を数値にしたい
176
+
177
+ console.log(Number("2000")); // 2000
178
+
179
+
180
+
181
+ function isValidDate(year, month, day) {
182
+
183
+ var d = (new Date(year, month - 1, day));
184
+
185
+ return year == d.getFullYear()
186
+
187
+ && month - 1 == d.getMonth()
188
+
189
+ && day == d.getDate();
190
+
191
+ }
192
+
193
+
194
+
195
+ [2400, 2300, 2200, 2004, 2001].forEach(function(year){
196
+
197
+ console.log(isValidDate(year, 2, 29));
198
+
199
+ });
200
+
201
+ // true
202
+
203
+ // false
204
+
205
+ // false
206
+
207
+ // true
208
+
209
+ // false
210
+
211
+
212
+
213
+ // 完全に存在しない不正な日付も繰り上がったりするので
214
+
215
+ console.log(new Date(2000, 3, 32)); // Tue May 02 2000 00:00:00 GMT+0900 (日本標準時)
216
+
217
+ console.log(isValidDate(2000, 4, 32)); // false
218
+
219
+ ```