首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >没有运行函数的RemoveEventListener

没有运行函数的RemoveEventListener
EN

Stack Overflow用户
提问于 2016-06-09 04:01:48
回答 1查看 1.3K关注 0票数 0

因此,我试图使用addEventListener函数删除我的removeEventListener函数。我读过很多关于它需要包含一个处理程序函数的文章,我已经这样做了。

其中一个问题是,当我使用google的搜索框更改输入时,我想删除事件侦听器。不要介意google,但真正发生的事情是识别输入值何时发生变化,并提供新的结果。所以有一点代码

代码语言:javascript
代码运行次数:0
运行
复制
var input = document.getElementById('search-input');
var searchBox = new google.maps.places.SearchBox(input);
google.maps.event.addListener(searchBox, 'places_changed', locationChange);

function previousButtonFunction(){
    //Does something here and does not return anything. Lets just say it places markers all over the map
}

function locationChange() {
    var previousButton = document.getElementById('previous');
    previousButton.removeEventListener('click', previousButtonFunction());
    previousButton.addEventListener('click', function () { previousButtonFunction()})
};

因此,这段代码对您可能没有任何意义,但我想得到的是,在第一个输入中,它将运行add事件侦听器,而不是运行removeEventListener函数。一旦输入的值发生变化,我想删除当前的侦听器,并使用新的addeventlistener重新标识previousButton。

在第一步中,我意识到previousButtonFunction()的函数是运行的,我认为只有当有一个已识别的侦听器时,它才会运行。因此,第一个问题是,如果未添加事件侦听器,那么应该运行removeEventListener函数吗?第二,如何在不运行函数的情况下删除addEventListener?我是否需要传入一个跟踪标识符,如true =>,运行它/false =>不运行?

非常感谢您的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-09 04:06:03

不要在函数名之后使用()。您只希望传递对该函数的引用。将()放在名称后面调用函数并传递返回值。这是一个很常见的错误。

改变这一点:

代码语言:javascript
代码运行次数:0
运行
复制
previousButton.removeEventListener('click', previousButtonFunction());

对此:

代码语言:javascript
代码运行次数:0
运行
复制
previousButton.removeEventListener('click', previousButtonFunction);

.addEventListener()也是如此。除非函数返回希望成为侦听器的另一个函数,否则不要将()放在函数名称后面。

FYI,有点不清楚为什么要删除,然后添加完全相同的侦听器函数。除非该对象上有多个侦听器,而且您试图更改侦听器的顺序,否则这本质上是一个noop。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37716574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档