|
36 | 36 | var autocomplete = input.autocomplete
|
37 | 37 | var typeahead = input.data('aaAutocomplete')
|
38 | 38 | var dropdown = typeahead.dropdown
|
| 39 | + var menu = dropdown.$menu |
39 | 40 | autocomplete.setVal() // clear value on page reload
|
40 | 41 | input.on('autocomplete:closed', clearSearch.bind(autocomplete))
|
41 | 42 | input.on('autocomplete:selected', disableClose)
|
42 | 43 | input.on('autocomplete:updated', resetScroll.bind(autocomplete.getWrapper().firstChild))
|
43 | 44 | dropdown._ensureVisible = ensureVisible
|
| 45 | + menu.off('mousedown.aa') |
| 46 | + var suggestionSelector = '.' + dropdown.cssClasses.prefix + dropdown.cssClasses.suggestion |
| 47 | + menu.on('mousedown.aa', suggestionSelector, onSuggestionMouseDown.bind(dropdown)) |
| 48 | + menu.off('mouseenter.aa') |
| 49 | + menu.off('mouseleave.aa') |
44 | 50 | if (filterInput) filterInput.addEventListener('change', toggleFilter.bind(typeahead))
|
45 | 51 | monitorCtrlKey(input, dropdown)
|
46 | 52 | searchField.addEventListener('click', confineEvent)
|
|
105 | 111 | }
|
106 | 112 |
|
107 | 113 | function onCtrlKeyDown (e) {
|
108 |
| - if (e.keyCode === CTRL_KEY) this.getCurrentCursor().find('a').focus() |
| 114 | + if (e.keyCode !== CTRL_KEY) return |
| 115 | + var container = this.datasets[0].$el |
| 116 | + var prevScrollTop = container.scrollTop() |
| 117 | + this.getCurrentCursor().find('a').focus() // calling focus can cause the container to scroll |
| 118 | + container.scrollTop(prevScrollTop) |
109 | 119 | }
|
110 | 120 |
|
111 | 121 | function onCtrlKeyUp (e) {
|
112 | 122 | if (e.keyCode === CTRL_KEY) this.focus()
|
113 | 123 | }
|
114 | 124 |
|
| 125 | + function onSuggestionMouseDown (e) { |
| 126 | + var dropdown = this |
| 127 | + var suggestion = dropdown |
| 128 | + ._getSuggestions() |
| 129 | + .filter('#' + e.currentTarget.id) |
| 130 | + if (suggestion.attr('id') === dropdown._getCursor().attr('id')) return |
| 131 | + dropdown._removeCursor() |
| 132 | + setTimeout(function () { |
| 133 | + dropdown._setCursor(suggestion, false) |
| 134 | + }, 0) |
| 135 | + } |
| 136 | + |
115 | 137 | function clearSearch () {
|
116 | 138 | this.close()
|
117 | 139 | this.setVal()
|
|
0 commit comments