2013-03-05 57 views
4
$("#prevPage").live("click",function(e) { 
................. 
}); 

例如,当用户已经点击prevPage时,里面的语句正在运行,如果用户立即点击它,它会再次触发。不过,我希望点击事件触发器只有在它内部的所有语句都完成执行后,如何实现这一点?谢谢。如何在执行时临时禁用点击功能?

+1

使用.on()而不是.live(),因为.live()不推荐使用。 – Swarne27 2013-03-05 04:52:20

+0

感谢提醒 – user782104 2013-03-05 04:54:13

回答

2

这个怎么样或者类似的东西:

<script type="text/javascript"> 
    // disable command while function is being executed. 
    var sample = { 
     isExecuting : 0, 
     doWork : function (e) { 
      if (sample.isExecuting === 1) return; 
      sample.isExecuting = 1; 
      // do work -- whatever you please 
      sample.isExecuting = 0; // say: I'm done! 
     } 
    }; 
    // live or bind 
    $("#prevPage").bind("click",function(e) { 
     sample.doWork(e); 
    }); 
</script> 

简单的“盾牌”来阻止多呼叫方案。

+0

如果像'settimeout'这样的异步执行,在“做工 - 无论你喜欢什么”时该怎么办。 – rab 2013-03-05 05:08:18

+0

然后您推迟“unflag”(sample.isExecuting = 0),直到操作完成。你在异步操作中有回调函数吗? – 2013-03-05 05:26:29

+0

async ajax或worker?我将提供一个代码示例。在所有异步场景中,有一些时刻需要同步执行某些操作。知道适用的应用程序是应用程序开发的先决条件。等待反馈 – 2013-03-05 05:28:32

0

使用jquery

$("#prevPage").unbind("click"); 

的解除绑定功能后,你的任务完成了

$("#prevPage").bind("click",function(){....your code here....}); 
+0

谢谢。如果所有的声明完成后怎么办? – user782104 2013-03-05 04:50:52

+0

你应该使用[die](http://api.jquery.com/die/),但在jQuery 1.9中知道'live'和'die'已被**删除**。 – elclanrs 2013-03-05 04:52:15

+0

$(“#prevPage”)。bind(“click”,function(){}); – 2013-03-05 04:55:00

1

然后设置元件上的标志,以检查它是否可点击与否。

$("#prevPage").on("click",function(e) { 

    e.preventDefault(); 

    //get the clickable attribute 
    //if it's not existent, its undefined hence "false" 
    var unclickable = this.unclickable; 

    //if it's not unclickable (it's clickable) 
    if(!unclickable){ 

    //make the flag unclickable 
    this.unclickable = true; 

    //do stuff 

    //reset it back the way it was after operations 
    this.unclickable = false; 
    } 


}); 
0

设置您的事件触发

var prevPageEventTriggered = false ; 

并将其设置为ture当事件触发

prevPageEventTriggered = true; 

,然后单击事件处理函数添加条件这个变量

$("#prevPage").live("click",function(e) { 

     if (prevPageEventTriggered) { 
       return false; 
     } 

     // your code goes here 
     // .... 
}); 

如果它已完成执行,则可以将其设置为false。希望这将有助于

0
  • 解除绑定()将做的工作适合你。

  • 替代方案可能像使用detach()。当您的进程正在执行分离按钮并且当您的进程执行完成时,请使用重新附加()来获取按钮。 我会建议的是使用unbind()

相关问题