因此,我试图使用addEventListener函数删除我的removeEventListener函数。我读过很多关于它需要包含一个处理程序函数的文章,我已经这样做了。
其中一个问题是,当我使用google的搜索框更改输入时,我想删除事件侦听器。不要介意google,但真正发生的事情是识别输入值何时发生变化,并提供新的结果。所以有一点代码
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 =>不运行?
非常感谢您的帮助。
发布于 2016-06-08 20:06:03
不要在函数名之后使用()
。您只希望传递对该函数的引用。将()
放在名称后面调用函数并传递返回值。这是一个很常见的错误。
改变这一点:
previousButton.removeEventListener('click', previousButtonFunction());
对此:
previousButton.removeEventListener('click', previousButtonFunction);
.addEventListener()
也是如此。除非函数返回希望成为侦听器的另一个函数,否则不要将()
放在函数名称后面。
FYI,有点不清楚为什么要删除,然后添加完全相同的侦听器函数。除非该对象上有多个侦听器,而且您试图更改侦听器的顺序,否则这本质上是一个noop。
https://stackoverflow.com/questions/37716574
复制