0

我无法使事件侦听器自调用和侦听器工作的功能。

以下代码执行该函数,但事件侦听器不起作用:

window.addEventListener("resize", (function () {
document.getElementById("divMenu").innerHTML = document.getElementById("divTop").offsetWidth
})())

该函数将设置网站格式所必需的(从一开始就是动态的)CSS 样式。“resize”函数必须在加载时执行。是否可以做到这一点,或者我应该创建一个单独的自调用函数并在事件侦听器上调用它?

4

2 回答 2

5

当您立即调用该函数时,它的返回值将放在它的位置 ( window.addEventListener('resize', undefined))。相反,在事件侦听器之外定义您的函数,然后添加并调用它。

function onResize() {
  document.getElementById('divMenu').innerHTML = document.getElementById("divTop").offsetWidth;
}
window.addEventListener('resize', onResize);
onResize();

从技术上讲,您可以使用自调用函数来完成这项工作,但这有点麻烦,我不建议这样做。

window.addEventListener('resize', (function onResize() {
  document.getElementById('divMenu').innerHTML = document.getElementById("divTop").offsetWidth;
  // Works because it returns a function
  return onResize;
})());
于 2016-01-27T16:41:19.820 回答
0

您的 IIF 返回未定义,但 eventlistener 必须是函数或函数链接。将 return 添加到您的 IIF 或传递函数:

匿名函数:

 window.addEventListener("resize", function () {
    document.getElementById("divMenu").innerHTML = document.getElementById("divTop").offsetWidth
 }))

IIF,返回一个函数

 window.addEventListener("resize", (function () {
 return function(){
    document.getElementById("divMenu").innerHTML = document.getElementById("divTop").offsetWidth
 }
 })())

编辑(在启动时调用分配):

window.addEventListener("resize", (function () {
  function set_innerHtml(){
    document.getElementById("divMenu").innerHTML = document.getElementById("divTop").offsetWidth
  }
  set_innerHtml();
  return set_innerHtml;
})())
于 2016-01-27T16:44:46.170 回答