Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在执行单击功能时临时禁用该功能?_Javascript_Jquery_Javascript Events_Mouseevent - Fatal编程技术网

Javascript 如何在执行单击功能时临时禁用该功能?

Javascript 如何在执行单击功能时临时禁用该功能?,javascript,jquery,javascript-events,mouseevent,Javascript,Jquery,Javascript Events,Mouseevent,例如,当用户已单击prevPage时,其中的语句正在运行,如果用户立即单击它,它将再次触发。但是,我希望click事件触发器只有在其内部的所有语句都完成执行后才能执行,如何实现这一点?谢谢。使用jquery的解除绑定功能 $("#prevPage").live("click",function(e) { ................. }); 任务完成后 $("#prevPage").unbind("click"); 然后在元素上设置一个标志,以检查它是否可单击 $("#prevPag

例如,当用户已单击prevPage时,其中的语句正在运行,如果用户立即单击它,它将再次触发。但是,我希望click事件触发器只有在其内部的所有语句都完成执行后才能执行,如何实现这一点?谢谢。

使用jquery的解除绑定功能

 $("#prevPage").live("click",function(e) {
.................
});
任务完成后

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

然后在元素上设置一个标志,以检查它是否可单击

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

设置事件触发的变量

$("#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;
  }


});
var prevPageEventTriggered = false ;
并在事件触发时将其设置为
true

$("#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;
  }


});
var prevPageEventTriggered = false ;
然后在click事件处理程序函数中为此添加条件

prevPageEventTriggered = true;

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

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

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

        if ( prevPageEventTriggered ) {
                return false;
        }

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

//在执行函数时禁用命令。
变量样本={
i执行:0,
doWork:函数(e){
if(sample.isExecuting==1)返回;
sample.i执行=1;
//做你想做的事
sample.isExecuting=0;//说:我完成了!
}
};
//生存或束缚
$(“#prevPage”).bind(“单击”,函数(e){
样本。道尔克(e);
});
简单的“屏蔽”来阻止多个呼叫场景。

  • 解除绑定()将为您完成这项工作

  • 另一种方法可能类似于使用detach()。当您的进程正在执行时,请分离按钮,当您的进程发现正在执行时,请使用重新连接()将按钮取回来。 我建议使用unbind()


您应该使用,但要知道,
live
die
已在jQuery 1.9中删除。$(“#prevPage”).bind(“单击”,函数(){});使用.on()而不是.live(),因为.live()正在弃用。如果在“做工作--随你所愿”上有类似于
settimeout
的异步执行,该怎么办?然后将“unflag”(sample.isExecuting=0)延迟到操作完成。在异步操作中有回调函数吗?异步ajax还是worker?我将提供一个代码示例。在所有异步场景中,有时某些操作需要同步进行。了解其适用范围是应用程序开发的先决条件。等待反馈