回答編集履歴

4

disabled属性をformに使わないようにしました

2018/03/19 13:58

投稿

退会済みユーザー
test CHANGED
@@ -1,4 +1,4 @@
1
- formにdisableをつけて、それをチェックするのがよいでしょう。スクリプトを、以下のように修正します。
1
+ ~~formにdisableをつけて、それをチェックするのがよいでしょう。スクリプトを、以下のように修正します。~~
2
2
 
3
3
  ```javascript
4
4
 
@@ -6,17 +6,17 @@
6
6
 
7
7
  var form = $(this);
8
8
 
9
- if (form.attr('disabled')) {
9
+ if (form.attr('data-mou-tsukaenai')) {
10
10
 
11
- // disabledがついているなら、無視する。
11
+ // data-mou-tsukaenaiがついているなら、無視する。
12
12
 
13
13
  event.preventDefault();
14
14
 
15
15
  } else if (confirm('送信しますか?')) {
16
16
 
17
- // 送信する。formにdisabled="disabled"をつける
17
+ // 送信する。formにdata-mou-tsukaenai="1"をつける
18
18
 
19
- form.attr('disabled', true);
19
+ form.attr('data-mou-tsukaenai', "1");
20
20
 
21
21
  } else {
22
22
 
@@ -30,7 +30,11 @@
30
30
 
31
31
  ```
32
32
 
33
- これで、期待する動作になります。`$(this)`はsubmitが起こったformになります。
33
+ ~~これで、期待する動作になります。`$(this)`はsubmitが起こったformになります。~~
34
+
35
+
36
+
37
+ class を変更してチェックする方法を追記しました。そちらを使ってください。
34
38
 
35
39
 
36
40
 
@@ -72,7 +76,7 @@
72
76
 
73
77
 
74
78
 
75
- 追記:「formの非活性」という状態はなく、属性値の変更で判断することはできません、実際の送信されるかどうかで確認るのがよいです
79
+ 追記:「formの非活性」という状態はなく、属性値の変更で動作を止めることはできません。JavaScriptで送信を止めます。
76
80
 
77
81
 
78
82
 

3

質問の追記に合わせて追記しました

2018/03/19 13:58

投稿

退会済みユーザー
test CHANGED
@@ -65,3 +65,69 @@
65
65
 
66
66
 
67
67
  これは、セレクタ `:submit` が正しくないため、何も変更しないのと同じです。
68
+
69
+
70
+
71
+ ---
72
+
73
+
74
+
75
+ 追記:「formの非活性」という状態はなく、属性値の変更で判断することはできませんので、実際の送信されるかどうかで確認するのがよいです。
76
+
77
+
78
+
79
+ こちらのサンプルで挙動を確認してください。
80
+
81
+ [https://codepen.io/hoo-chan/pen/rdMZqa](https://codepen.io/hoo-chan/pen/rdMZqa)
82
+
83
+
84
+
85
+ ```html
86
+
87
+ <!doctype html>
88
+
89
+ <meta charset="utf-8">
90
+
91
+ <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.12.4.min.js"></script>
92
+
93
+ <form action="" method="post" data-disable="false">
94
+
95
+ <input type="text" name="textBox">
96
+
97
+ <input type="submit" name="send" id="submit">
98
+
99
+ </form>
100
+
101
+ <script>
102
+
103
+ $(function() {
104
+
105
+ $('form').submit(function() {
106
+
107
+ var form = $(this);
108
+
109
+ if (form.hasClass('mou-tsukaenai')) {
110
+
111
+ event.preventDefault();
112
+
113
+ alert('このフォームはもう使えません');
114
+
115
+ } else {
116
+
117
+ form.addClass('mou-tsukaenai');
118
+
119
+ // テストのため、通常の送信もキャンセルする
120
+
121
+ alert('送信しました');
122
+
123
+ event.preventDefault();
124
+
125
+ }
126
+
127
+ });
128
+
129
+ });
130
+
131
+ </script>
132
+
133
+ ```

2

試したコードが動かなかった理由を追記いたしました

2018/03/17 15:35

投稿

退会済みユーザー
test CHANGED
@@ -1,20 +1,22 @@
1
- disableを直接チェックするのがよいでしょう。スクリプトを、以下のように修正します。
1
+ formにdisableをつけて、それをチェックするのがよいでしょう。スクリプトを、以下のように修正します。
2
2
 
3
3
  ```javascript
4
4
 
5
5
  $('form').submit(function (event) {
6
6
 
7
- if ($(this).attr('disabled')) {
7
+ var form = $(this);
8
8
 
9
+ if (form.attr('disabled')) {
10
+
9
- // submitできな状態なら、送信しない
11
+ // disabledがつているなら、無視する
10
12
 
11
13
  event.preventDefault();
12
14
 
13
15
  } else if (confirm('送信しますか?')) {
14
16
 
15
- // 送信する。submitできなくす
17
+ // 送信する。formにdisabled="disabled"をつけ
16
18
 
17
- $(this).attr('disabled', true);
19
+ form.attr('disabled', true);
18
20
 
19
21
  } else {
20
22
 
@@ -28,4 +30,38 @@
28
30
 
29
31
  ```
30
32
 
33
+ これで、期待する動作になります。`$(this)`はsubmitが起こったformになります。
34
+
35
+
36
+
37
+ ---
38
+
39
+
40
+
31
- これで期待する作にります。
41
+ 以下は試したコードがかった理由です。
42
+
43
+
44
+
45
+ > ```
46
+
47
+ > $("#submit").attr("disabled", true); //disabledにならない
48
+
49
+ > ```
50
+
51
+
52
+
53
+ 「#submitのボタンを押してsubmit」はできなくなります。しかし、Enterでのsubmitはできてしまいます。
54
+
55
+
56
+
57
+ > ```
58
+
59
+ > $(this).find(':submit').attr('disabled', 'disabled'); //disabledにならない
60
+
61
+ > $(this).find(':submit').attr('visibility', 'hidden'); //disabledにならない
62
+
63
+ > ```
64
+
65
+
66
+
67
+ これは、セレクタ `:submit` が正しくないため、何も変更しないのと同じです。

1

「ボタンが使えなくする」より「formをsubmitできなくする」が正しいので修正しました

2018/03/17 09:51

投稿

退会済みユーザー
test CHANGED
@@ -6,19 +6,19 @@
6
6
 
7
7
  if ($(this).attr('disabled')) {
8
8
 
9
- // ボタンが使えない状態なら、送信しない。
9
+ // submitできない状態なら、送信しない。
10
10
 
11
11
  event.preventDefault();
12
12
 
13
13
  } else if (confirm('送信しますか?')) {
14
14
 
15
- // 送信する。ボタンを使えなくする。
15
+ // 送信する。submitできなくする。
16
16
 
17
17
  $(this).attr('disabled', true);
18
18
 
19
19
  } else {
20
20
 
21
- // 送信しない。ボタンはまだ使える。
21
+ // 送信しない。まだsubmitできる。
22
22
 
23
23
  event.preventDefault();
24
24