点击次数过多后,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; }