【JavaScript】ボタンクリック処理実行中のボタンを無効にし、重複実行を防ぐ

■ボタンの有効/無効

ボタンを有効/無効にする場合は、「document.getElementById」プロパティの「disable」を使用する。

let btn = document.getElementById('ボタンのIDを指定');

// 無効
btn.disabled = true;

// 有効
btn.disabled = false;

■作成するプログラムの概要

・HTMLの画面にてJavaScriptを実装する。

・「実行」ボタン押下時、「実行」ボタンを無効、10秒待機、「実行」ボタンを有効にする。

■フローチャート

■プログラム仕様

 

処理名実行ボタン押下処理
処理概要ボタンを無効にする。
10秒待機する。
ボタンを有効にする。
引数なし
戻り値なし

 

入力処理内容出力
ボタンのIDを取得する。
ボタンを無効にする。
実行ステータスのdiv要素のIDを取得する。
■ループ処理:10回繰り返し
|同期処理:1秒待つ
|実行ステータスを表示する。
【innerHTML】
実行中(n/10)
ボタンを無効にする。
終了メッセージ出力する。【innerHTML】
終了

■画面レイアウト

・「実行」ボタン押下時、「実行」ボタンを無効、10秒待機(※)、「実行」ボタン有効

・処理終了時、【実行ステータス】を終了にする。

(※)10秒待機中、【実行ステータス】を「実行中・・・n/10」に変更する。
なお、nは秒数(加算されていく)

■サンプルコード

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>ボタン無効</title>
</head>
<body>
    <!-- 入出力設定 -->
    <input type="button" value="実行" id="execute" onclick="fnc_diable()">
    <br>
    <br>
    【実行ステータス】
    <div id="exe_status">実行前</div>

    <!-- ここにjavascriptを実装する-->
    <script type="text/javascript">
        /*
            処理名
                待機処理
            処理概要
                指定の時間分、待機する
            引数
                ミリ秒
            戻り値
                Promiseオブジェクトの状態(成功/失敗)
        */
        function sleep_fnc(n) {
            // nミリ秒後に一度だけ処理を呼び出す
            return new Promise(function(resolve){
                setTimeout(resolve, n);
            });
        }

        /*
            処理名
                実行ボタン押下処理
            処理概要
                ボタンを無効にする
                10秒待機する
                ボタンを有効にする
            引数
                なし
            戻り値
                なし
        */
        async function fnc_diable() {
            // ボタンのIDを取得する
            let btn = document.getElementById('execute');

            // ボタンを無効にする
            btn.disabled = true;

            // 実行ステータスのdiv要素のIDを取得
            let div_exe_status = document.getElementById('exe_status');

            // 10回繰り返し
            for(let i = 1; i <= 10; i++){
                // 同期処理:1秒待つ
                await sleep_fnc(1000)
                // 実行ステータスを表示
                div_exe_status.innerHTML = `実行中・・・${i}/10`;
            }

            // ボタンを有効にする
            btn.disabled = false;

            // 終了メッセージ出力
            div_exe_status.innerHTML = '終了しました';

        }

    </script>
</body>
</html>

■実行結果

・実行前


・実行中(ボタン無効)


・実行終了(ボタン有効)

タイトルとURLをコピーしました