0

私はテキストエリアを持っています:

      <form id='test'>
      <textarea class='test2'> </textarea> <input type='submit' value='send'/>
      </form>

ユーザーがテキストエリアを送信できる回数を制限する方法があるかどうかを知りたい (たとえば、1 分間に 5 回)。

編集: Javascript で、クライアント側でそれを行いたいと思います。

編集2:

雑談用です。ほんのわずかな時間内にあまりにも多くのメッセージを投稿できないようにしたいだけです。したがって、ページを更新して制限を乗り越えても問題はありません。それを行うのにかかる時間は十分に長いです...

4

4 に答える 4

2

いくつかの変数を保存できます:

$(function () {
   var timesSubmitted = 0;
   var maxSubmits = 5;
   var intervalMilliseconds = 10000; // for testing   
   var interval;   
    $('input[type=submit]').click(function (event) {
        if (!interval) {
            interval = setTimeout(function () {
                interval = undefined;
                timesSubmitted = 0;
                $('div').append('TIMER RESET. Submit again.<br />')
            }, intervalMilliseconds);
        }
        timesSubmitted ++;
        if (timesSubmitted > maxSubmits) {
            $('div').append('NO GO YO!<br />')
        } else {
            $('div').append('valid<br />')   
        }
        event.preventDefault();        
    });        
});​

于 2012-11-21T15:14:39.947 に答える
1

彼らが言ったように、javascriptでこれを行うことは専門的でも安全でもありません。サーバー側の方が優れていますが、次のようになります。

<script type="text/javascript"> 
var flag = false;
function checkTimer(){
    if (flag){
        flag=false;
        return true;
    }
    alert("Don't flood man!");
    return false;
}

//12 seconds, max 5 times per minute
setTimeout(function(){flag=true;},12000);
</script>

そしてフォーム上:

<form id='test' onSubmit="return checkTimer()">
于 2012-11-21T15:26:48.987 に答える
1

jsFiddleでこの簡単な小さなサンプルを作成しました。情報を保持するために変数をリロードせずにフォームを送信できるように、おそらくいくつかの ajax でこれをワープする必要があります。

あなたがAJAXバージョンを探しているなら、それは何かに見えるでしょう

// Setup variable for easy tracking!!!
var timesSubmitted = 0, timeCounter = 60 * 1000, Timer = null;

// Call function to submit form
function submitForm() {
  // Check if user has submitted form more than 5 times
  if (timesSubmitted < 5) {
      // Call ajax to submit form. jQuery Ajax: http://api.jquery.com/jQuery.ajax/
      $.ajax({
          type: "POST",
          url: 'ajaxpage.html',
          data: { test2: $('#test textarea').val() },
          success: function(data) { // if form is submitted successfully
              // If timer has yet to be started... Start it! 
              if (Timer === null) {
                  Timer = setTimeout(
                      function() {  
                          // Setup alert so user knows they can continue to submit form
                          if (timesSubmitted > 0) { alert('Submissions Reset'); }
                          timesSubmitted = 0; 
                      }, 
                  timeCounter );
              }

              // Add for submission to counter
              timesSubmitted++;
            }
      });
  }else{
      // Alert user they can not sumbit anymore!
      alert('You may only submit this from 5 times per minute!');
  }
}
于 2012-11-21T15:27:29.203 に答える
0

いいえ、クライアント側でこれを制限する方法はありません (JavaScript を使用してそのような制限を強制することはできますが、JS を無効にすることで簡単に省略できます)。ターゲットスクリプトにそのような制限を適用し、頻繁になる場合はフォーム処理を拒否できます

于 2012-11-21T14:56:48.830 に答える