我正在尝试将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的函数。

有时称为self-executing函数:

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

10-07 14:54