0

我有一个文本区域:

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

我想知道是否有办法限制用户可以提交 textarea 的次数(例如,每分钟 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 回答