t_28
@t_28 (R .T)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

ボタンを非活性化して二重送信を防止したい

Q&A

Closed

解決したいこと

 特定のボタンを非活性化して二重送信を防止したいです。

発生している問題

 ボタンを非活性化することはできましたが、button、submitにしている箇所が全て非活性化されてしまう状況です。
 特定のボタンが非活性化されるようにjsを修正したいですが、クラス?id?の指定方法が分かりません。

該当するソースコード

掲載したコードは登録ボタンだけですが、画面には戻るボタンや他のボタンがあります。
現状コードだと登録ボタンを押した際に、戻るボタンや他のボタンも非活性化されてしまうので、登録ボタンを押したときには登録ボタンだけが非活性化されるようにしたいです。

index.php
<?= $this->Form->button(__('登録'), ['class' => 'float-right margin-left5px']) ?>
double_click_disabled.js
$(function() {
    $(document).on('submit', function() {
        $('form').find(':submit').prop('disabled', true);
        $('form').find(':button').prop('disabled', true);
    });
});

自分で試したこと

index.phpでidを作り、jsの方でidを渡してみましたが変化はありませんでした。

index.php
<?= $this->Form->button(__('登録'), ['class' => 'float-right margin-left5px','id'=>'click_disabled']) ?>
double_click_disabled.js
$(function() {
    document.getElementById('click_disabled').onsubmit = function() {
        $('form').find(':submit').prop('disabled', true);
        $('form').find(':button').prop('disabled', true);
        }
});

新たに発生した問題

 回答いただいたもので試したところ、やりたいこととしてはできました。
追加情報で、写真のように登録ボタンが複数ある画面では最初の登録ボタンしか非活性化されませんでした。
スクリーンショット (203).png
 写真は、氏名が一覧表示される画面で、氏名ごとに登録できるようになっています。写真の登録ボタンを押すと、項目A(Aは仮称)に内容が入る仕様です。
 現在、一番初めの登録ボタンは非活性化されますが、二個目以降のボタンは非活性化されていない状況です。

該当するソースコード

index.php
<?= $this->Form->postButton(__('登録'), ['action' => 'addBusinessTalk', $company->id],['class'=>'button margin_bottom_none','id'=>'click_disabled']) ?>
double_click_disabled.js
$(function() {
    $(document).on('submit', function() {
        $('#click_disabled').prop('disabled',true);
    });
});

アドバイス・ヒントをお願いいたします。

0

3Answer

Comments

  1. @t_28

    Questioner

    回答いただきありがとうございます。
    find(':button')やfind(':submit')をつけると非活性化できなかったのですが、不要な理由はありますか?
    これはそういうものだと覚えてしまった方が良いものでしょうか。
  2. そもそもfindは「子孫要素」を探すメソッドです.
    DOM上idは唯一でなくてはならず,標的のElementがidで特定できるなら不要です.
  3. @t_28

    Questioner

    そういうことだったのですね。findメソッドについて勉強になりました。ありがとうございます。
index.php
<?= $this->Form->postButton(__('登録'), ['action' => 'addBusinessTalk', $company->id],['class'=>'button margin_bottom_none on_clicked_disable']) ?>
double_click_disabled.js
$(function() {
    $(document).on('submit', function() {
        $('.on_clicked_disable').prop('disabled',true);
    });
});

@Hinata888 さんの案を実際のコードにしただけです。「click_disabledなんて名前だと後で意味わかんなくなるぞ」と思ったのが動機:laughing:

1Like

Comments

  1. @t_28

    Questioner

    回答ありがとうございます。
$(function() {
    $(document).on('submit', function() {
        $('#click_disabled').prop('disabled',true);
    });
});

でidで指定するのではなく、ボタンすべてに同じclassを付けてclassで指定すればいいのではないでしょうか?

0Like

Comments

  1. @t_28

    Questioner

    回答ありがとうございます。
    すみませんが、どこをどのように変更されたか教えて頂けないでしょうか。
    double_click_disabled.jsは変更しないで、index.phpの方で同じクラス名を付ければよいのでしょうか。
  2. ①index.phpで該当のボタンすべてに同じクラス名がつくように修正
    ②double_click_disabled.jsの以下の部分を①で修正したクラス名に変更
    $('#click_disabled')

    で可能ではないかと考えています。

Your answer might help someone💌