Javascript 事件侦听器在对象方法中不起作用
Javascript event listener don't work inside an object method
请考虑以下代码:
function Elements() {
this.mainSection = document.querySelector('.main-section');
this.searchBtn = document.getElementById('search');
this.searchBar = document.querySelector('.search-bar');
...
}
var initiate = new Elements();
initiate.toggleBar = function() {
console.log(this.mainSection);
}
initiate.addClick = function() {
this.searchBtn.addEventListener('click', this.toggleBar );
}
initiate.addClick();
点击事件时,它返回undefined
,带括号它自动运行函数。
为什么事件侦听器会这样?
附言我只是在学习Javascript,并尝试编写灵活的代码。这是我正在做的一个好习惯,还是我把事情复杂化了?
你可以改变
this.searchBtn.addEventListener('click', this.toggleBar );
自
this.searchBtn.addEventListener('click', this.toggleBar.bind(this));
使此代码:)工作
问题是,当您将函数this.toggleBar
分配给addEventListener
时,函数this
上下文会丢失。详情请参阅 https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#The_value_of_this_within_the_handler。
相关文章:
- Meteor-添加用户自定义字段的方法不起作用
- 在 JQUERY 中创建 HTML 后,Jquery 方法不起作用
- 为什么这个扩展方法不起作用
- Splice()方法不起作用
- Angularjs-向工厂传递数据的方法不起作用
- Knockout和bread.js的take方法不起作用Paging
- javascript注入$http-post方法不起作用
- 为什么pulk()和where()方法不起作用
- Ajax get 方法不起作用
- 当我将javascript代码放在外部站点.js文件中时,Ajax页面方法不起作用
- getJSON 方法不起作用
- Jquery ajax get 方法不起作用
- jQuery AddClass 方法不起作用
- ScriptManager.RegisterStartupScript() 方法不起作用 - ASP.NET,C#
- 为什么JavaScript方法不起作用
- 为什么 findRandom() mongoose for node.js 方法不起作用
- BackboneJS的设置方法不起作用
- 从javascript调用 asp.net 页面方法不起作用
- 主干.js对以前的方法不起作用进行建模
- toExponential() 方法不起作用