2010-10-20 64 views
2

我有这样的代码显示加载图像当我运行一个Ajax调用:什么是在Ajax调用期间禁用链接的最佳方式。

$('.event').live('click', function() { 
    var spinner = $("<img src='/content/images/ajax-loader.gif' />").insertAfter(this); 

的问题是,因为它的一个异步调用,如果你点击一个链接多次,它会显示与多个纺纱。显然,这只是我不希望在第一次返回之前允许另一个Ajax调用的症状。

在现有ajax调用的窗口期间“禁用”链接或按钮的最佳方法是什么?

回答

4

妙处.live()的是,它是基于选择。

因为该处理程序被触发元素与.event类,只是改变它的类,并且处理程序不会再触发。

$('.event').live('click', function() { 
    $(this).toggleClass('event event_clicked'); 
    var spinner = $("<img src='/content/images/ajax-loader.gif' />").insertAfter(this); 

这将删除event类,并与event_clicked取代它,这样的元素,随后单击不会触发live()处理程序。

要恢复功能,只需再次交换类。

0

你可以做的是在你点击链接后删除链接上的监听器(或者添加一个监听器,只需要return false;来停止事件,然后在ajax调用完成之后,将监听器重新分配给链接。它是为停用状态,作为请求花费。

因此它可能是好的,回调存储在一个单独的变量,缓解分配。

0
  1. 您可以隐藏链接,或将其替换为非功能性但视觉上相似的内容。

  2. 您可以使用视觉上类似的div覆盖该链接,以防止人们点击该链接。

  3. 您可以插入一个有状态的开关,捕获链接上的点击并调用event.stopPropagation()。

当AJAX呼叫终止时,可以将其中的每一个重置为其先前的状态。

相关问题