所以我试图使用removeEventListener函数删除我的addEventListener功能。我已经读了很多关于它需要包含一个处理程序函数的内容,我已经做到了。
其中一个问题是,当我使用谷歌的搜索框更改输入时,我想删除eventlistener。不要介意谷歌,但实际上所有发生的事情都是识别输入值何时发生了变化,并提供新的结果。所以一点代码
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函数。一旦input的值发生了更改,我想删除当前侦听器,并用一个新的addeventlistener重新标识previousButton。
在第一次尝试时,我意识到previousButtonFunction()的函数是运行的,我认为只有当有一个已识别的侦听器时,它才会运行。那么,第一个问题是,如果没有添加eventlistener,那么removeEventListener函数应该运行吗?第二,如何在不运行函数的情况下删除addEventListener?我是否需要传递一个跟踪标识符,例如true=>运行它/false=>不运行?
感谢任何帮助,非常感谢
不要在函数名称后面使用()
。您只想传递对函数的引用。将()
放在名称后面会调用函数并传递返回值。这是一个非常常见的错误。
更改此项:
previousButton.removeEventListener('click', previousButtonFunction());
到此:
previousButton.removeEventListener('click', previousButtonFunction);
.addEventListener()
也是如此。不要将()
放在函数名之后,除非函数返回另一个您想作为侦听器的函数。
FYI,有点不清楚为什么您试图删除并添加回完全相同的侦听器函数。除非该对象上有多个侦听器,并且您正试图更改侦听器的顺序,否则这本质上是一个noop。