Javascript-防止函数多次执行

Javascript-防止函数多次执行,javascript,Javascript,我有一个在点击(或点击)时执行的函数,因为我正在使用Cordova 问题在于,函数从Parse.com调用下一个对象,该对象显示其详细信息,但出于某种原因,它执行函数两次甚至三次,跳过必须显示的1或2个对象 我想防止这种情况发生,所以我已经使用了一个标志(布尔值),通过将它设置为true来指示它是否被执行。如果该标志为false,则可以执行该标志并将其设置为true。另一个问题是,当我再次调用该函数时,布尔值仍然设置为true,并且该函数将不会执行 因此,我无法在方法内部将标志初始化为false

我有一个在点击(或点击)时执行的函数,因为我正在使用Cordova

问题在于,函数从Parse.com调用下一个对象,该对象显示其详细信息,但出于某种原因,它执行函数两次甚至三次,跳过必须显示的1或2个对象

我想防止这种情况发生,所以我已经使用了一个标志(布尔值),通过将它设置为true来指示它是否被执行。如果该标志为false,则可以执行该标志并将其设置为true。另一个问题是,当我再次调用该函数时,布尔值仍然设置为true,并且该函数将不会执行

因此,我无法在方法内部将标志初始化为false,因为这样它将始终被执行。全局变量将在第一次设置为true,并在其剩余的“生命周期”中保持true

我尝试了第二种方法,使用计数器并确保如果计数器达到,比如说0,它可以被执行,但是当它到达末尾时,我遇到了同样的问题,将其设置回0。。假设函数执行了两次,我可以检查计数器是否达到2(每次递增),并将其设置回0。然后,当下次执行时,它执行3次,因此当计数器达到2.时进行检查。。它被设置回0,下一次执行(第三次执行)将再次执行,因为计数器再次为0

我如何捕捉或防止这种情况发生

我制作了一个基本的Javascript来向您展示我的意思:

window.addEventListener("load",setup,false);
var counter = 0;
function setup() {
   for(var i = 0; i < 3; i++) {
       showAlert();
   }
}

function showAlert() {
   if(counter == 0) {
       alert("Executed once");
       counter++;
   } else if(counter > 2) //counter is bigger than 2, so it got executed more than once {
       counter = 0; //reset the counter to 0
   }          
}
window.addEventListener(“加载”,设置,错误);
var计数器=0;
函数设置(){
对于(变量i=0;i<3;i++){
showarert();
}
}
函数showAlert(){
如果(计数器==0){
警报(“执行一次”);
计数器++;
}否则,如果(counter>2)//counter大于2,则会多次执行它{
计数器=0;//将计数器重置为0
}          
}
目标是防止函数执行多次(在这种情况下,警报可能不会显示多次)。它可以执行两次甚至三次,甚至更多。我如何防止这种情况

谢谢大家!! 我确实知道一些编程方面的知识,但这是我到目前为止从未遇到过的问题,因此我不知道如何捕捉到这一点并确保它执行一次?

您正在经历“反弹”,这是一个由一次碰撞在短时间内连续多次记录而引起的问题。要绕过它,您需要在函数上设置一个非常短的超时。(20毫秒左右) 您可以使用第三方库(如LoDash),该库具有许多有用的实用功能(如执行此操作的功能),也可以自己这样做:

var lastClick=0;
无功延迟=20;
函数doClick(){
如果(lastClick>=(Date.now()-delay))
返回;
lastClick=Date.now();
//做事
警惕(“你好!”);
}

推送我
这是我经常使用的类似代码

const delay = 500; // anti-rebound for 500ms
let lastExecution = 0;

function myFunction(){
    if ((lastExecution + delay) < Date.now()){
       // execute my lines
       lastExecution = Date.now() 
    }
}
const delay=500;//500毫秒防反弹
设lastExecution=0;
函数myFunction(){
如果((上次执行+延迟)
您是在寻找一个只能每X秒调用一次的函数(如lodash's helper)还是一个只能在完成操作后再次调用的函数?我在寻找一个用户单击时必须调用一次的函数,但出于某种原因,Cordova会执行一次、两次甚至三次。所以我正在寻找一种防止这种情况发生的方法。所以如果我得到了正确的答案,我也可以使用“setTimeout”函数?从它被执行的那一刻起,它保持一秒钟,然后被执行?或者这完全是另一回事?我刚刚测试了这段代码,但它不起作用:(它不断跳过某些对象(因此它不断执行多次)@Jorrex您可以尝试将超时时间增加到100ms。或者,您可以在按下按钮后立即禁用该按钮,并在完成数据提取后重新启用该按钮。这样,它就不能跳过项目。是否应该是
lastClick>=(Date.now()-20)