簡體   English   中英

在setInterval中調用onClick function

[英]Call onClick function in setInterval

我有一個按預期工作的onClick function。 通過單擊觸發此 function 一次后,我想使用setInterval定期運行它。

這是我修改代碼以嘗試執行此操作的方式:

    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...
    }

我已經根據此處的一對一答案修改了setInterval中 function 的調用。

我認為這里的問題是將參數傳遞給 function。有沒有辦法實現這個?

問題是在 function 本身中創建間隔時,進行了無限增長的間隔調用,這可能就是它不起作用的原因。 解決方法可能是這樣的:

您定義一個 function 並使用來自 onClick 的 setTimeout 調用它:

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);
}

現在,在startInerval function,可以調用onClick; 但是為了防止累積間隔,我聲明了一個標志來檢查並只創建一次間隔:

var checkFlag = false;
function startInterval(clickData){
   if(checkFlag === false){
      checkFlag = true;
      setInterval(function(){onClick(clickData);}, 500);
   }
}

您可以使用添加點擊監聽器,然后在按下按鈕並設置間隔后刪除點擊監聽器:

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);
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM