From c77e159178198376eed49a34ed224b163d7edec1 Mon Sep 17 00:00:00 2001 From: Anthony Dmitriyev Date: Thu, 3 Apr 2014 17:28:13 +0300 Subject: [PATCH] Another solution for clicks triggered on underlying elements --- select2.js | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/select2.js b/select2.js index e850e591..f9107f29 100644 --- a/select2.js +++ b/select2.js @@ -735,11 +735,24 @@ the specific language governing permissions and limitations under the Apache Lic this.container.on("click", killEvent); installFilteredMouseMove(this.results); - this.dropdown.on("mousemove-filtered touchstart touchmove touchend", resultsSelector, this.bind(this.highlightUnderEvent)); - this.dropdown.on("touchend", resultsSelector, this.bind(this.selectHighlighted)); + + this.dropdown.on("mousemove-filtered", resultsSelector, this.bind(this.highlightUnderEvent)); + this.dropdown.on("touchstart touchmove touchend", resultsSelector, this.bind(function (event) { + this._touchEvent = true; + this.highlightUnderEvent(event); + })); this.dropdown.on("touchmove", resultsSelector, this.bind(this.touchMoved)); this.dropdown.on("touchstart touchend", resultsSelector, this.bind(this.clearTouchMoved)); + // Waiting for a click event on touch devices to select option and hide dropdown + // otherwise click will be triggered on an underlying element + this.dropdown.on('click', this.bind(function (event) { + if (this._touchEvent) { + this._touchEvent = false; + this.selectHighlighted(); + } + })); + installDebouncedScroll(80, this.results); this.dropdown.on("scroll-debounced", resultsSelector, this.bind(this.loadMoreIfNeeded));