阻止用户进行垃圾邮件 - Jquery附加

时间:2013-09-16 16:07:02

标签: javascript jquery html css spam

如何防止用户发送垃圾邮件?比如,如果他一次又一次地快速,快速地输入评论,如何阻止用户?

JS Fiddle

HTML:

<p>
  <a href="javascript:void(0);" class="add_more">Add More</a>
</p>

<table border="0" width="500" cellspacing="0">
  <tbody class="append_data"></tbody>

  <tr>
    <td> 
      <textarea name="description" id="description"></textarea>
    </td> 
  </tr> 

</table>  

CSS:

#description{
  width:400px;    
}

.description_text{
  border:#333333 solid 1px;
  width:400px !important;
}

.append_data{
  white-space: pre-wrap;      /* CSS3 */   
  white-space: -moz-pre-wrap; /* Firefox */    
  white-space: -pre-wrap;     /* Opera <7 */   
  white-space: -o-pre-wrap;   /* Opera 7 */    
  word-wrap: break-word;      /* IE */
}

jQuery的:

$('.add_more').click(function(){
    var description = $('#description').val();
    $(".append_data").append('<div class="description_text">'+description+'</div><br><br>');
  });

4 个答案:

答案 0 :(得分:0)

每次有人点击添加按钮时,你都可以尝试将+ 1添加到变量,并且每隔n秒就会使变量= 0的setInterval

答案 1 :(得分:0)

这个怎么样......

http://jsfiddle.net/7jE9p/2/

当你点击它时,我已经让它隐藏了“添加更多”链接10秒......

$('.add_more').click(function() {
    var description = $('#description').val();
    $(".append_data").append('<div class="description_text">'+description+'</div><br><br>');
    var $this = $(this);
    $this.hide();
    setTimeout(function() {
        $this.show();
    }, 10000);
});

答案 2 :(得分:0)

我使用了sessionStorage变量并设置了一个间隔。这使得您无法在添加内容

后单击添加更多按钮60秒

http://jsfiddle.net/vMcEE/

`sessionStorage.timer = 0;
  setInterval(function(){if (sessionStorage.timer > 0) {sessionStorage.timer--}},1000);
  $('.add_more').click(function(){
                         if (sessionStorage.timer == 0){
                             sessionStorage.timer += 30
                        var description = $('#description').val();
                        $(".append_data").append('<div class="description_text">'+description+'</div><br><br>');
                         }
                         });`

答案 3 :(得分:0)

如果是人类放入垃圾评论,那么使用set-timeout等功能或使用像jQuery Debounce这样的插件,设置为60秒,让人们感到沮丧。

假设,如果你只是做'限速'而不是垃圾评论,那么上述解决方案就可以了(有助于'聊天室'就像行为一样)以防止人们像

一样

B'/ P>

C

d

ë

...后

它仍然没有使用服务器端那么强大,但它可以让你在那里一半。

但是如果它是垃圾箱,你可以使用一些不同的技术,设置超时不会(因为它们可以在你的站点锤击24小时/天没有问题)。首先,正如少数人指出的那样,服务器端验证。他们发出AJAX请求,您的服务响应,您检查他们的个人资料,并使用上次发布的变量,检查当前时间。如果当前时间 - 上次发布&lt; interval,返回一个可以用jQuery.ajax a la

处理的消息
.done(function(data) {
  if(data.timeoutCode == 1) {
    $.append("You can't post again so quickly");
  }})

你也可以使用一种奇怪的老hacky技术来添加一个额外的字段,通常会填充垃圾邮件......就像

<input type="text" name="location" style="display:none"></input>

和垃圾邮件程序是盲目的,他们将填写所有字段,认为他们将得到服务器响应,它失败了。但是,在javascript方面,当你去提交时,检查你的onclick按钮if $(“input [name ='location'])。val()。length&gt; 0 ...如果长度大于0 ,它将忽略该请求(并在服务器端节省您的一些努力),普通用户将不会触摸它,因为该字段将被隐藏,并且将无法填写它。但是如果他们只是使用可用的POST功能,那么客户端验证仍然会失败,然后您还必须通过服务器端验证进行备份。

提供客户端垃圾邮件解决方案确实没有万无一失的解决方案......您可以在客户端提供帮助。

编辑:阿切尔提出了一个不错的观点。

我的意思是,用例也很奇怪,但是,您可以使用event.which,在发布帖子之前,确定用户是否点击了按钮(或使用了输入,或者其他),并且只有当他们这样做时它,那么你只能向那个发表评论的特定用户显示他们确实按下/点击提交而不是使用自动化进行提交。但是这会带来奇怪的用法:如果你使用jQuery.append,你只会影响当前会话的视图,除非它通过服务器路由,如果它通过服务器路由,你应该只是在服务器端检查...