The mouse event handlers added to the 'Powered by MapBox' link at the foot of the suggestions list are added again to _footerNode each time the suggestions are redrawn. This leads to an accumulation of many duplicate 'mousedown' and 'mouseup' handlers.
|
// Add support for footer. |
|
var parentDraw = typeahead.list.draw; |
|
var footerNode = this._footerNode = getFooterNode(); |
|
typeahead.list.draw = function() { |
|
parentDraw.call(this); |
|
|
|
footerNode.addEventListener('mousedown', function() { |
|
this.selectingListItem = true; |
|
}.bind(this)); |
|
|
|
footerNode.addEventListener('mouseup', function() { |
|
this.selectingListItem = false; |
|
}.bind(this)); |
|
|
|
this.element.appendChild(footerNode); |
|
}; |
The event handlers should be added to _footerNode only once, outside of typeahead.list.draw()
I noticed this because it was apparent that the _footerNode wasn't being garbage collected in a Single Page App that I was debugging.
The mouse event handlers added to the 'Powered by MapBox' link at the foot of the suggestions list are added again to _footerNode each time the suggestions are redrawn. This leads to an accumulation of many duplicate 'mousedown' and 'mouseup' handlers.
mapbox-gl-geocoder/lib/index.js
Lines 288 to 303 in 66c236f
The event handlers should be added to _footerNode only once, outside of typeahead.list.draw()
I noticed this because it was apparent that the _footerNode wasn't being garbage collected in a Single Page App that I was debugging.