2

プロセスのステータスを監視し、そのステータスのページを表示する PHP ベースの Web アプリケーションがあります。ユーザーは、ページのボタンをクリックしてステータスを更新できます。ただし、サーバーの処理負荷が非常に高いため、ステータスを頻繁に更新することは望ましくありません。そのため、[送信] ボタンを 1 分あたり 1 回クリックするように制限する方法が必要です (これにより、ページに表示されるステータスが更新されます)。たとえば、誰かが 12:00:00 にボタンをクリックした場合、12:01:00 まで再度クリックできないようにする必要があります。

ボタンをクリックした後、おそらくボタンを無効にし、1 分後に再度有効にしたいと思います。これが私の推奨する解決策です。

どうもありがとうございました。

4

5 に答える 5

7

wtf ... 人々は jQuery にはまっています。

<input id="btn" type="button" value="click me" onclick="doSomething();"/>

<script>
function doSomething() {
  document.getElementById("btn").disabled=true;
  setTimeout('document.getElementById("btn").disabled=false;',60000);
  // do your heavy stuff here
}
</script>
于 2009-10-11T19:38:58.520 に答える
5

単なる提案ですが、クライアント側のタイマー (setTimeout) を使用して送信ボタンの速度を制限するコードを書くのに苦労する場合は、更新ボタンをすべて削除して、事前に定義した間隔でページを自動更新しますか?

jQuery のサンプル コードを次に示します (jQuery は優れたクロスブラウザー AJAX サポートを提供するため)。

<html>
<head>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    <scrypt type="text/javascript">
    $(function(){
        // On page load...
        updateStatus();
    })

    function updateStatus(){
        $('#status').load('/url/to/status/display.php');
        setTimeout(updateStatus, 60000) // 60,000 miliseconds = 1 minute
    }
    </script>
</head>
<body>

    <div id="status">
        <!-- whatever is in /url/to/status/display.php will be loaded here -->
    </div>

</body>
</html>
于 2009-10-11T08:12:38.930 に答える
5

この純粋な JavaScript を実行するには、クリック イベントをキャプチャし、ボタンを無効にして、タイムアウト後に再度有効にします。以下のコードは jQuery を使用しており、ボタンに id 'button' (<button id="button"> Click!</button> または入力の場合: <input type='button' id="button">Click!</input>)

<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js'></script>
<script type='text/javascript'>
$('#button').click( function(){
    $(this).attr('disabled', 'disabled');
    setTimeout(enableButton, 1000);
    return true; //make sure default click event happens
});

var enableButton = function(){
    $('#button').removeAttr('disabled');
}
</script>

あなたは進行状況が非常に重いと言っていますが、人々がボタンを 1 分間に 1 回以上押すことはできなくても (JavaScript が有効になっている場合)、JavaScript を無効にして好きなだけボタンを押すことができることに注意してください。彼らが好きなだけ何度でも直接URLにアクセスしてください。

編集スクリプトに完全な HTML を追加

于 2009-10-11T08:27:18.993 に答える
1

setTimeout を使用します。

于 2009-10-11T08:08:52.603 に答える
0

underscore.jsを使用すると、これは次のように簡単です。

var func = _.debounce(function(x) {return x * x}, 60000);
于 2012-08-10T11:17:32.220 に答える