关闭在加载时激活,而不是复选框更改

Closure activates on load, not checkbox change

本文关键字:复选框 加载 激活      更新时间:2023-09-26

我正试图将一个onchange事件附加到js创建的复选框中。

我终于让闭包在for循环中工作,但现在它在加载时激活,而不是在更改时激活。

为什么会这样?

https://jsfiddle.net/dkrh587h/2/

  chkbox.addEventListener("change", (function(newVarA, newVarB, newVarC, newVarD) {
    searchMap(newVarA, newVarB, newVarC, newVarD);
  }(gblStatus, "Status", statuser, chkbox.checked)), false);

这是因为您正在调用作为第二个参数传递给带有额外括号的addEventListener的函数。

这有时被称为自执行功能:

function() {
    // will get invoked immediately
}();

由于闭包的原因,像statuser这样的变量将在回调中可用(假设它们是在"包含"发布代码的函数范围内声明的)。

这样的模式应该有效:

var statuser = 'my user'; // will be available in your callback
chkbox.addEventListener("change", function() {
  searchMap(gblStatus, "Status", statuser, chkbox.checked);
}, false);