javascript - 如何用多个事件处理程序触发一个函数(更改)

标签 javascript

我想添加一个条件,即只有在两者都满足的情况下才会触发该函数 addEventListener('change', SwitchG) 事件为 True(=两者均已更改)。 当两者之一发生变化时,我当前使用的代码已经激活了该功能。

var hallo = document.getElementById("S131_01");
var hallo1 = document.getElementById("S130_01");

hallo.addEventListener('change', SwitchG);
hallo1.addEventListener('change', SwitchG);

function SwitchG () {
    var test1 = document.getElementById("submit");                                                                             
  test1.classList.add("css");   
}

最佳答案

您需要另一个变量,它检查两者是否已更改,并且仅在两个更改都已发生时才执行处理程序函数:

var hallo = document.getElementById("S131_01");
var hallo1 = document.getElementById("S130_01");
var countChanges = 0; // <-- this tracks changes

hallo.addEventListener('change', SwitchG);
hallo1.addEventListener('change', SwitchG);

function SwitchG () {
  countChanges += 1;  // <-- count up
  if (countChanges >= 2) {
    countChanges = 0; // <-- reset (if needed)

    var test1 = document.getElementById("submit");                                                                             
    test1.classList.add("css"); 
  }  
}

然而,更强大的实现还可以跟踪已更改的元素,并确保来自单个元素的重复更改事件不会成功运行处理程序。

例如使用此实用程序:

function ChangedCounter (minChanges) {
  var elements = new Set();
  return {
    changed(element) {
      elements.add(element);
    },
    clear() {
      elements.clear();
    },
    isReady() {
      return elements.size >= minChanges;
    }
  };
}

你可以这样写:

var hallo = document.getElementById("S131_01");
var hallo1 = document.getElementById("S130_01");
var countChanges = ChangedCounter(2);

hallo.addEventListener('change', SwitchG);
hallo1.addEventListener('change', SwitchG);

function SwitchG (e) {
  countChanges.changed(e.target);
  if (countChanges.isReady()) {
    countChanges.clear();

    var test1 = document.getElementById("submit");                                                                             
    test1.classList.add("css"); 
  }  
}

关于javascript - 如何用多个事件处理程序触发一个函数(更改),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55850759/

相关文章:

javascript - 如何从 Javascript 中调用嵌入式 swfs 函数?

javascript - Jquery 仅在不可见时才向下滑动

javascript - 添加一个简单的收缩动画到我当前的js/css

javascript - 在computed中导入组件和在vuejs动态导入中导入组件有什么区别?

Javascript 说我的函数不是函数

javascript - ReactJS 动画边框或圆圈基于计时器

javascript - Webpack - 输出不同的文件扩展名?

javascript - 如何更改 div 中的边框颜色?

javascript - 页面更新触发功能(无限滚动)

javascript - 当在另一个函数中调用调用它的函数时,React Hooks 状态无法正常工作