Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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 在setInterval中调用onClick函数_Javascript_Ajax - Fatal编程技术网

Javascript 在setInterval中调用onClick函数

Javascript 在setInterval中调用onClick函数,javascript,ajax,Javascript,Ajax,我有一个onClick函数,它可以正常工作。单击触发此函数一次后,我想使用setInterval定期运行它 以下是我如何修改代码以尝试此操作: var clickData; var isClicked=0; function onClick(e) { console.log("OnClick called") if(isClicked==0){ clickData = this; isClick

我有一个
onClick
函数,它可以正常工作。单击触发此函数一次后,我想使用
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
对函数的调用


我认为这里的问题在于将参数传递给函数。有没有办法做到这一点?

您可以使用添加单击侦听器,然后在按下按钮并设置间隔后删除单击侦听器:

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

问题是,在函数本身中创建间隔时,进行了无限增长的间隔调用,这可能就是它不起作用的原因。解决方法可以是这样的:

定义函数并使用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函数中,您可以调用onClick;但是,为了防止累积时间间隔,我声明了一个标志来检查并仅创建一次时间间隔:

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

我的问题忘了提。我试过这个,但不起作用。没有自动调用
onClick
。我编辑了答案。也许这个解决方法解决了这个问题。
onClick
侦听器所连接的元素没有ID。我正在以编程方式添加许多按钮并绑定click操作。因此,根据单击的按钮,ID会发生变化。我在
clickData
中也看不到对象id。