質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

565閲覧

jquery を使わず、form で連続クリック禁止したい

ttakahashi2013

総合スコア26

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2017/10/06 02:50

編集2017/10/06 03:40

タイトルの通り、jquery 抜きで form で連続クリック禁止したいのですが、
良さそうだなと思ったのは下記のURLのコメントに載っているサンプルでした。

ただこちらの例が一般的に良い例なのかコメントをいただきたいのと、
最終的に javascript の form.submit() も検知できるように作りたいのですが、
どなたか良い例をご存知であればご教授ください。

<追記>
なんのために連続クリックを禁止するかというと、例えば登録画面などで、ユーザーが一度登録ボタンを押下後、サーバー側の処理中にユーザーがちゃんと押せたかな?と思って2度3度登録ボタンを押してしまうことがありますがそのユーザーの繰り返しのボタン押下操作を防止したいという意味です。

https://qiita.com/summer4an/items/311f8c83fc95e26772d2

javascript

1<script> 2(function() { 3 'use strict'; 4 5 document.addEventListener('submit', function(event) { 6 var target = event.target; 7 if (target.tagName.toLowerCase() !== 'form') { 8 return; 9 } 10 var elements = target.elements; 11 var i, len, element; 12 for (i = 0, len = elements.length; i < len; ++i) { 13 element = elements[i]; 14 element.disabled = true; 15 } 16 }); 17})(); 18</script>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2017/10/06 03:24

連続クリックの定義がわかりません。submitを2通しすることはないと思いますが、何をどう禁止するのでしょうか?
ttakahashi2013

2017/10/06 03:39

ご質問ありがとうございます。例えば登録画面などで、ユーザーが一度登録ボタンを押下後、サーバー側の処理中にユーザーがちゃんと押せたかな?と思って2度3度登録ボタンを押してしまうことがありますがそのユーザーの繰り返しのボタン押下操作を防止したいという意味です。
guest

回答2

0

Firefoxで戻ったときに無効になっているだろうなあと思ったのですが、すべてdisabledにするのはもっと大きな影響があります。

https://developer.mozilla.org/ja/docs/Web/HTML/Element/Input

無効状態のコントロールの値はフォームとともに送信しません。

submitするボタンを無効にすることはよく見かけますが、すべてを無効にすると、本当にすべて何も送られなくなってしまいます。

投稿2017/10/06 04:10

x_x

総合スコア13749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

考え方は2つあります

一つはフラグで管理してサブミットイベントを無効化すること
ただしこれだとボタンが押せるので、二度押しさせないことにはなりません
(二回目以降のボタン押しが無効になっているのでサーバーに負荷はかかりません)

気になるならもう一つ、submitボタンをdisabledにすることです。
ただしsubmitはsubmitボタンだけで起きるわけではありません。
気休め程度に考えておいたほうがいいでしょう。
またsubmitボタンを無効化して戻ってきた場合、submitボタンが押せなくなる
ケースもあるので運用には注意が必要です。

sample

javascript

1var flg=false; 2document.addEventListener('submit',function(e){ 3 if(flg){ 4 e.preventDefault(); 5 }else{ 6 e.target.querySelector('[type=submit]').disabled=true; 7 flg=true; 8 } 9});

投稿2017/10/06 04:06

yambejp

総合スコア114767

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttakahashi2013

2017/10/06 08:42

シンプルな回答と注意点に関しありがとうございました。 前者のフラグ管理でいかせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問