Javascript addEventListener(';单击';)正在自行执行
在我的javascript(ES6)中,我有一个简单的带有事件处理程序的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
标记,基本上当单击
标记时,我希望页面重定向
我的问题是,当我将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);