点击次数过多后,Jquery停止加载function

如何在链接上单击用户多次后停止加载function?

Jquery代码如下所示:

$(document).ready(function(){ $(".menu_rfr").click(function() { $("#main").html(''); location.replace($(this).attr('rel')); }); $(".menu_clickable").click(function() { $("#main").html(''); $("#main").load($(this).attr('rel')); }); }); 

HTML:

   

编辑:

这是示例页面与此Jquery代码的链接。 链接文字

单击按钮后禁用该按钮:

 $(".menu_clickable").click(function() { $(this).attr("disabled", "disabled"); $("#main").html(''); $("#main").load($(this).attr('rel'), function() { // reactivate it after some loading has completed $(this).removeAttr("disabled"); }); }); 

您应该始终重新激活success回调中的链接以确保加载已完成,例如:

 $.get($(this).attr('rel'), function(html) { $("#main").html(html); $(this).removeAttr("disabled"); }); 

编辑:根据您的评论更新。 如果你的’action’元素是div,你必须解除click事件的绑定以防止重新点击产生效果,并在加载完成后重新绑定,例如:

 function handleClick() { $(this).unbind("click"); $("#main").html(''); $("#main").load($(this).attr('rel'), function() { // reactivate it after some loading has completed $(this).click(handleClick); }); } $(".menu_clickable").click(handleClick); 

做什么karim说,但不仅检查它已被点击,但该function成功获取数据。 但如果你的负载每按一次就会获得新的更新,这将不起作用。

另一个想法是假设在太多快速点击中双击,所以只对元素上的dblclick事件返回false。

如果您没有使用输入字段(禁用它们),则可以使用.data()来跟踪请求是否正在进行,而不是响应连续的点击。

 $(".menu_clickable").click(function() { var menuItems = $('.menu_clickable'); if (!menuItems.data('current')) { $("#main").html(''); $("#main").load($(this).attr('rel'), function () { menuItems.removeData('current'); }); menuItems.data('current', true); }; }); 

如果要允许多次单击(?),可以使用相同的方法,但存储计数器而不是简单的布尔值。

你可以在这种情况下使用.live()以及干净利落,如下所示:

 $(".menu_clickable:not(.disabled)").live('click', function() { $(this).addClass('disabled'); $("#main").html('') .load($(this).attr('rel'), function() { $(this).removeClass('disabled'); }); }); 

这可以通过使用.live()来监听事件气泡并运行您的处理程序。 当您启动加载时,它会向元素添加“disabled”类,使其不再满足.live()选择器,从而阻止它执行。 当加载完成后,它将删除该类,使其再次满足.live()选择器,并且句柄将再次click时工作/执行。

作为奖励,您可以轻松创建匹配的CSS规则,以向用户表明它已被禁用,如下所示:

 .disabled { color: red; }