Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript addEventListener(';单击';)正在自行执行_Javascript_Html_Ecmascript 6 - Fatal编程技术网

Javascript addEventListener(';单击';)正在自行执行

Javascript addEventListener(';单击';)正在自行执行,javascript,html,ecmascript-6,Javascript,Html,Ecmascript 6,在我的javascript(ES6)中,我有一个简单的带有事件处理程序的标记,基本上当单击标记时,我希望页面重定向 我的问题是,当我将URL参数传递给处理重定向的函数时,不管是否单击了addEventListener,测试函数都会执行,因此它基本上只是在页面加载时来回重定向,这不是我想要的 是否有任何原因this.elem.addEventListener('click',this.test(this.elem.id)),false是否自行执行 index.html: <a id="abo

在我的javascript(ES6)中,我有一个简单的带有事件处理程序的
标记,基本上当单击
标记时,我希望页面重定向

我的问题是,当我将URL参数传递给处理重定向的函数时,不管是否单击了
addEventListener
,测试函数都会执行,因此它基本上只是在页面加载时来回重定向,这不是我想要的

是否有任何原因
this.elem.addEventListener('click',this.test(this.elem.id)),false是否自行执行

index.html:

<a id="about" class="a-tag" target='_blank'>About</a>
Nav.js:

export const Nav = {

  elem: document.querySelector('.a-tag'),

  init() {
    this.render();
  },

  test(page) {
      window.location.href = "/" + page + ".html";
  },

  render() {
    if (this.elem) {
      this.elem.addEventListener('click', this.test(this.elem.id), false);
    }
  }

};

因为传递的不是函数的引用,而是函数的结果。您可以调用直接重定向的函数。换成这个

this.elem.addEventListener('click', () => this.test(this.elem.id), false);

如果您使用ES6编程,则不需要
“严格使用”。所有ES6代码都是严格模式。你也不需要生活,真的吗?非常感谢@托拉扎布鲁
export const Nav = {

  elem: document.querySelector('.a-tag'),

  init() {
    this.render();
  },

  test(page) {
      window.location.href = "/" + page + ".html";
  },

  render() {
    if (this.elem) {
      this.elem.addEventListener('click', this.test(this.elem.id), false);
    }
  }

};
this.elem.addEventListener('click', () => this.test(this.elem.id), false);