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

回答編集履歴

4

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

2018/03/19 13:58

投稿

退会済みユーザー
answer CHANGED
@@ -1,21 +1,23 @@
1
- formにdisableをつけて、それをチェックするのがよいでしょう。スクリプトを、以下のように修正します。
1
+ ~~formにdisableをつけて、それをチェックするのがよいでしょう。スクリプトを、以下のように修正します。~~
2
2
  ```javascript
3
3
  $('form').submit(function (event) {
4
4
  var form = $(this);
5
- if (form.attr('disabled')) {
5
+ if (form.attr('data-mou-tsukaenai')) {
6
- // disabledがついているなら、無視する。
6
+ // data-mou-tsukaenaiがついているなら、無視する。
7
7
  event.preventDefault();
8
8
  } else if (confirm('送信しますか?')) {
9
- // 送信する。formにdisabled="disabled"をつける
9
+ // 送信する。formにdata-mou-tsukaenai="1"をつける
10
- form.attr('disabled', true);
10
+ form.attr('data-mou-tsukaenai', "1");
11
11
  } else {
12
12
  // 送信しない。まだsubmitできる。
13
13
  event.preventDefault();
14
14
  }
15
15
  });
16
16
  ```
17
- これで、期待する動作になります。`$(this)`はsubmitが起こったformになります。
17
+ ~~これで、期待する動作になります。`$(this)`はsubmitが起こったformになります。~~
18
18
 
19
+ class を変更してチェックする方法を追記しました。そちらを使ってください。
20
+
19
21
  ---
20
22
 
21
23
  以下は、試したコードが動かなかった理由です。
@@ -35,7 +37,7 @@
35
37
 
36
38
  ---
37
39
 
38
- 追記:「formの非活性」という状態はなく、属性値の変更で判断することはできません、実際の送信されるかどうかで確認るのがよいです
40
+ 追記:「formの非活性」という状態はなく、属性値の変更で動作を止めることはできません。JavaScriptで送信を止めます。
39
41
 
40
42
  こちらのサンプルで挙動を確認してください。
41
43
  [https://codepen.io/hoo-chan/pen/rdMZqa](https://codepen.io/hoo-chan/pen/rdMZqa)

3

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

2018/03/19 13:58

投稿

退会済みユーザー
answer CHANGED
@@ -31,4 +31,37 @@
31
31
  > $(this).find(':submit').attr('visibility', 'hidden'); //disabledにならない
32
32
  > ```
33
33
 
34
- これは、セレクタ `:submit` が正しくないため、何も変更しないのと同じです。
34
+ これは、セレクタ `:submit` が正しくないため、何も変更しないのと同じです。
35
+
36
+ ---
37
+
38
+ 追記:「formの非活性」という状態はなく、属性値の変更で判断することはできませんので、実際の送信されるかどうかで確認するのがよいです。
39
+
40
+ こちらのサンプルで挙動を確認してください。
41
+ [https://codepen.io/hoo-chan/pen/rdMZqa](https://codepen.io/hoo-chan/pen/rdMZqa)
42
+
43
+ ```html
44
+ <!doctype html>
45
+ <meta charset="utf-8">
46
+ <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.12.4.min.js"></script>
47
+ <form action="" method="post" data-disable="false">
48
+ <input type="text" name="textBox">
49
+ <input type="submit" name="send" id="submit">
50
+ </form>
51
+ <script>
52
+ $(function() {
53
+ $('form').submit(function() {
54
+ var form = $(this);
55
+ if (form.hasClass('mou-tsukaenai')) {
56
+ event.preventDefault();
57
+ alert('このフォームはもう使えません');
58
+ } else {
59
+ form.addClass('mou-tsukaenai');
60
+ // テストのため、通常の送信もキャンセルする
61
+ alert('送信しました');
62
+ event.preventDefault();
63
+ }
64
+ });
65
+ });
66
+ </script>
67
+ ```

2

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

2018/03/17 15:35

投稿

退会済みユーザー
answer CHANGED
@@ -1,16 +1,34 @@
1
- disableを直接チェックするのがよいでしょう。スクリプトを、以下のように修正します。
1
+ formにdisableをつけて、それをチェックするのがよいでしょう。スクリプトを、以下のように修正します。
2
2
  ```javascript
3
3
  $('form').submit(function (event) {
4
+ var form = $(this);
4
- if ($(this).attr('disabled')) {
5
+ if (form.attr('disabled')) {
5
- // submitできな状態なら、送信しない
6
+ // disabledがつているなら、無視する
6
7
  event.preventDefault();
7
8
  } else if (confirm('送信しますか?')) {
8
- // 送信する。submitできなくす
9
+ // 送信する。formにdisabled="disabled"をつけ
9
- $(this).attr('disabled', true);
10
+ form.attr('disabled', true);
10
11
  } else {
11
12
  // 送信しない。まだsubmitできる。
12
13
  event.preventDefault();
13
14
  }
14
15
  });
15
16
  ```
17
+ これで、期待する動作になります。`$(this)`はsubmitが起こったformになります。
18
+
19
+ ---
20
+
16
- これで期待する作にります。
21
+ 以下は試したコードがかった理由です。
22
+
23
+ > ```
24
+ > $("#submit").attr("disabled", true); //disabledにならない
25
+ > ```
26
+
27
+ 「#submitのボタンを押してsubmit」はできなくなります。しかし、Enterでのsubmitはできてしまいます。
28
+
29
+ > ```
30
+ > $(this).find(':submit').attr('disabled', 'disabled'); //disabledにならない
31
+ > $(this).find(':submit').attr('visibility', 'hidden'); //disabledにならない
32
+ > ```
33
+
34
+ これは、セレクタ `:submit` が正しくないため、何も変更しないのと同じです。

1

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

2018/03/17 09:51

投稿

退会済みユーザー
answer CHANGED
@@ -2,13 +2,13 @@
2
2
  ```javascript
3
3
  $('form').submit(function (event) {
4
4
  if ($(this).attr('disabled')) {
5
- // ボタンが使えない状態なら、送信しない。
5
+ // submitできない状態なら、送信しない。
6
6
  event.preventDefault();
7
7
  } else if (confirm('送信しますか?')) {
8
- // 送信する。ボタンを使えなくする。
8
+ // 送信する。submitできなくする。
9
9
  $(this).attr('disabled', true);
10
10
  } else {
11
- // 送信しない。ボタンはまだ使える。
11
+ // 送信しない。まだsubmitできる。
12
12
  event.preventDefault();
13
13
  }
14
14
  });