J'ai une fonction onClick qui fonctionne comme prévu. Une fois que cette fonction a été déclenchée une fois par clic, je souhaite l'exécuter périodiquement en utilisant setInterval.

Voici comment j'ai modifié le code pour tenter ceci:

    var clickData;
    var isClicked=0;

    function onClick(e) {
      console.log("OnClick called")
      if(isClicked==0){
        clickData = this;
        isClicked = 1;
        console.log(clickData);
      }

      let empID = clickData.options.empID;
      let reqURL = baseurl  + API_KEY + "&MonitoringRef=" + empID;

      $.ajax({
          type: "GET",
          dataType: "jsonp",
          url: reqURL,
          success: success2,

        });

    }

    if(isClicked==1){
      var f = onClick;
      f.paramater1 = clickData;
      setInterval(f, 500); 
    }

    function success2(json2){
      console,log(json2);
      //Do something with json2...
    }

J'ai modifié l'appel de la fonction de setInterval selon l'une à l'une des réponses ici < / a>.

Je pense que le problème ici est de passer les paramètres à la fonction. Y a-t-il un moyen d'y parvenir?

-1
DotPi 26 oct. 2020 à 17:09

2 réponses

Meilleure réponse

Le problème était qu'avec la création de l'intervalle dans la fonction elle-même, un appel d'intervalle croissant infini était peut-être la raison pour laquelle cela ne fonctionnait pas. Le travail autour peut être quelque chose comme ceci:

Vous définissez une fonction et l'appelez à l'aide du setTimeout de onClick:

function onClick(e) {
   // Your onClick function body ...

   // Add this in your onClick function to call the following function that creates the interval
   setTimeout( function() { startInterval(clickData); }, 1);
}

Maintenant, dans la fonction startInerval, vous pouvez appeler onClick; cependant pour éviter d'accumuler les intervalles, je déclare un drapeau pour vérifier et créer l'intervalle une seule fois:

var checkFlag = false;
function startInterval(clickData){
   if(checkFlag === false){
      checkFlag = true;
      setInterval(function(){onClick(clickData);}, 500);
   }
}
0
Saadat 26 oct. 2020 à 14:53

Vous pouvez utiliser ajouter un écouteur de clic, puis supprimer l'écouteur de clic après avoir appuyé sur le bouton et que l'intervalle est défini:

const buttonID = document.getElementById("INSERT-ID-OF-YOUR-BUTTON-HERE")

const yourFunction = () => {
    // your code that you want to be called twice per second goes here
    buttonID.removeEventListener("click")
}

buttonID.addEventListener("click", () => {
    setInterval(yourFunction, 500);
});
-1
Wilmor 26 oct. 2020 à 14:16