jQuery - 如何阻止用户发送垃圾邮件事件处理程序

时间:2012-01-30 11:30:40

标签: jquery user-controls event-handling

我正在寻找一个简单的&用于编码jQuery事件处理程序的语义方式,允许合理的超时或以其他方式“减慢”事件被触发的速度,以防止用户(故意或无意地)发送垃圾邮件。

这对我个人来说通常不是一个问题,因为在大多数情况下简单地停止前一个处理程序的操作就足够了 - 例如,一个淡入淡出的菜单;只需在动画上使用.stop()即可。

然而,我现在正在制作更多js重页,其事件太昂贵,不能每秒发射一次或两次以上,并且通过多种方式触发这些事件,我发现自己需要限制它们的频率在更基层执行。

问题的一个例子:

$(document).bind('mousewheel', function(e, delta){
    alert('you scrolled the mousewheel!');
    stopLoadsOfStuff();
    fadeHalfADozenImagesInAndOutAgain();
});

我正在使用鼠标滚轮插件(此处:http://brandonaaron.net/code/mousewheel/docs),因为取决于鼠标,操作系统或制造商提供的软件,滚动速率可能会有很大差异。想想那些闪亮的苹果触摸鼠标与90年代的旧球鼠标之一。如果您在滚动时触发事件,您会发现除非您的事件执行和停止非常便宜,否则您需要将其限制为合理的事情。

我已经尝试过的事情是:

对于点击和键盘事件:

为每个事件设置一个布尔值,在事件触发时将其设置为true,并使用回调将其再次设置为false。仅当bool为false时才会执行事件。 这很有效,但是很混乱,而且有点过于具体。

对于鼠标滚轮事件:

每次检测到鼠标滚轮事件时,我都会增加一个整数变量,只有当它超过5时才执行操作。处理程序在执行时将其重置为0。

TL;博士

我需要一种可扩展的,简单的方法来限制事件处理程序的执行速度,这将允许我使用昂贵的事件处理程序,而不必担心用户尝试每秒执行100次:)

任何帮助表示赞赏

1 个答案:

答案 0 :(得分:2)

您可能对jQuery debounce plugin感兴趣。

插件背后的概念是它包装你在另一个函数中传递的处理程序,该速率通过每x毫秒调用它来限制函数的执行。