Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.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_Html_Checkbox - Fatal编程技术网

Javascript 阻止由另一段代码调用的函数调用

Javascript 阻止由另一段代码调用的函数调用,javascript,jquery,html,checkbox,Javascript,Jquery,Html,Checkbox,场景: 在这种情况下,大量的复选框绑定到名为onChange()的函数 我还有另一个函数,它能够根据代码中的一些其他参数立即重置/更新特定的复选框。让我们调用此函数rapidFire() 现在,我想做的是仅当用户手动单击复选框时才触发onChange()。如果我的其他代码(重置/更新)或定期运行的rapidFire()正在对进行一系列onChange()调用的复选框进行更改,则应全部取消 我已经实现了一个debounce逻辑来捕获rapidFire()代码发出的所有onChange()调用,但是

场景:

在这种情况下,大量的
复选框
绑定到名为
onChange()
的函数

我还有另一个函数,它能够根据代码中的一些其他参数立即重置/更新特定的复选框。让我们调用此函数
rapidFire()

现在,我想做的是仅当用户手动单击
复选框时才触发
onChange()
。如果我的其他代码(重置/更新)或定期运行的
rapidFire()
正在对进行一系列
onChange()
调用的复选框进行更改,则应全部取消

我已经实现了一个
debounce
逻辑来捕获
rapidFire()
代码发出的所有
onChange()
调用,但是,根据去Bouncing的性质,它仍然允许在经过特定毫秒后的最后执行一个调用

我想做的是
cancel
在特定毫秒阈值内进行的所有函数调用,假设它们是由update/reset或
rapidFire()进行的。我在这里还假设,如果一个人点击一个复选框,他们很难在
250毫秒或类似的时间范围内点击另一个复选框

这是我在post帮助下实现的debounce代码

在HTML方面:


重新表述我的问题:如何更改此去Bounce函数,使其在背对背触发时取消所有函数调用,并且只允许在阈值内进行一次函数调用(模拟人工交互)?

而不是将onChange()函数与复选框的onChange事件绑定,将其与onclick事件绑定


这样,只有在单击复选框时,才会调用函数。

有趣!,如果my
rapidFire()
code选中并取消选中复选框,则不会触发
onClick()
事件?
onClick()
事件是否仅在使用鼠标/触摸板时触发?是的…当输入设备单击复选框时触发onClick事件因此我的问题是我的
复选框
被包装在
ss多选下拉列表
组件中,如果我将
ngModelChange
更改为
单击
,它绑定到父下拉列表本身,而不是其中的复选框。。。。这是我的表演,我已经完成了,现在它可以工作了。
limitedOnChange = this.debounce(this.onChange, 250);

  onChange(event) { console.log('change detected: ', event) }

  debounce(fn, delay) {
    let timer = null;
    return function () {
      const context = this, args = arguments;
      clearTimeout(timer);
      timer = setTimeout(function () {
        fn.apply(context, args);
      }, delay);
    };
  }