Javascript addEventListener 函数在没有触发事件的情况下被调用

标签 javascript arrays function addeventlistener

我可能忽略了一些明显的事情,但这似乎并不正确。

我有这个小代码块,其中 addEventListener 方法应该触发一个函数,同时传递一个参数,这样我就可以在创建所有 EventListeners 时使用不同的函数一个循环。 它确实有效,但当网站完成加载时,该函数会立即被调用。

为什么函数不等待触发,而是立即运行?

var html = document.getElementsByTagName('html');
var pics = document.getElementsByClassName('pics');
var functions = [];

for(h=0;h<pics.length;h++){
    array[h] = show(h);
}

for(p=0;p<pics.length;p++){
    pics[p].addEventListener('click',array[p]);
}

function show(index){
    html[0].style.backgroundColor = "black";
}

最佳答案

在脚本中

for (h = 0; h < pics.length; h++) {
    array[h] = show(h);
  }

您正在调用值为 h 的函数 show

它在那时被调用。因此,背景设置为给定的颜色。

这不是因为您在第二个 for 循环 中添加了 addEventListener

可以这样写。

for (h = 0; h < pics.length; h++) {
    array[h] = show; // don't  call,store the function reference
  }

  for (p = 0; p < pics.length; p++) {
    pics[p].addEventListener('click', array[p].bind(this,p));
  }

您可以将两个 for 循环缩短为一个

  for (p = 0; p < pics.length; p++) {
    pics[p].addEventListener('click', show.bind(this,p));
  }

注意:

addEventListener期待回调,而不是函数调用

关于Javascript addEventListener 函数在没有触发事件的情况下被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43158290/

相关文章:

javascript - 我们可以从跨域注册 Service Worker 吗

javascript - 将子级中的 v-model 链接到父级值 vue js

arrays - 如何附加到由指针标识的数组

php - 包含动态子数组的数组;只捕获最后一个子数组

javascript - JavaScript 中函数内函数 vs 函数返回函数

javascript - 使用 mozilla 打印到不同的打印机

javascript - Bootstrap Modal 关闭后 CSS Transition 中断

javascript - 使用 mySQL 数组对象作为 int

matlab - Matlab中的访问函数

function - Kotlin 中的 Kleisli 求幂