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

回答編集履歴

3

テキスト修正

2019/08/24 13:44

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -59,4 +59,22 @@
59
59
  });
60
60
 
61
61
  });
62
+ ```
63
+
64
+ ### 追記2
65
+
66
+ フォームに submit イベントのハンドラを設定するほうのコードで、
67
+ ```
68
+ document.forms.input_form.addEventListener('submit', function(e) {
69
+ ```
70
+ ```
71
+ let user_name = this.name.value;
72
+ ```
73
+ と、アロー `(e) => { ・・・ }` ではなく `function(e) {・・・}` と書くことにより、 `this` にフォームが入ってきます。アローを使って、`this`を使わないとするならば、たとえば以下でもよいです。
74
+
75
+ ```javascript
76
+ const form = document.forms.input_form;
77
+
78
+ form.addEventListener('submit', () => {
79
+ let user_name = form.name.value;
62
80
  ```

2

テキスト修正

2019/08/24 13:44

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -10,12 +10,19 @@
10
10
  document.addEventListener('DOMContentLoaded',function(){
11
11
 
12
12
  document.forms.input_form.addEventListener('submit', function(e) {
13
- e.preventDefault();
13
+ let valid = true; // 1つでもバリデーションエラーの項目があれば false にするフラグ
14
14
  let user_name = this.name.value;
15
15
  console.log(user_name);
16
16
  if(user_name == ''){
17
17
  console.log('名前が入力されていません');
18
+ valid = false;
18
19
  }
20
+
21
+ // ・・・他の項目のバリデーション
22
+
23
+ // すべてのバリデーションが終わった後、valid フラグがfalse なら、フォームをサブミットしないようにする。
24
+ if(!valid)
25
+ e.preventDefault();
19
26
  });
20
27
 
21
28
  });

1

テキスト修正

2019/08/24 12:50

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -19,4 +19,37 @@
19
19
  });
20
20
 
21
21
  });
22
+ ```
23
+
24
+ ### 追記
25
+
26
+ 上記のように修正するか、もしくは 送信ボタンにイベントハンドラを設定するのであれば、送信ボタンを以下
27
+ ```html
28
+ <input type="button" id="btn" value="送信">
29
+ ```
30
+
31
+ のように `type="submit"` ではなく、 `type="button"` にして、普通のボタンにしておいて、ボタンのクリックハンドラを、たとえば、以下のような内容で設定します。
32
+
33
+ ```javascript
34
+ document.addEventListener('DOMContentLoaded',function(){
35
+
36
+ document.getElementById('btn').addEventListener('click', (e) => {
37
+ const form = document.forms.input_form;
38
+ let valid = true; // 1つでもバリデーションエラーの項目があれば false にするフラグ
39
+
40
+ let user_name = form.name.value;
41
+ console.log(user_name);
42
+ if(user_name == ''){
43
+ console.log('名前が入力されていません');
44
+ valid = false;
45
+ }
46
+
47
+ // ・・・他の項目のバリデーション
48
+
49
+ // 他のバリデーションも全部通ったら、フォームをサブミットする。
50
+ if (valid)
51
+ form.submit();
52
+ });
53
+
54
+ });
22
55
  ```