From eb09dfcce057320c1f8749eadde774d9c0e85a8c Mon Sep 17 00:00:00 2001 From: Adam Schepis Date: Mon, 3 Feb 2014 11:34:51 -0500 Subject: [PATCH] make selection on iOS more intuitive allow touchend to cause selection of touched item. Detect touchmove events so that selection of touched item can be canceled --- select2.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/select2.js b/select2.js index cda250a3..0dfca87c 100644 --- a/select2.js +++ b/select2.js @@ -715,6 +715,9 @@ the specific language governing permissions and limitations under the Apache Lic 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("touchmove", resultsSelector, this.bind(this.touchMoved)); + this.dropdown.on("touchstart touchend", resultsSelector, this.bind(this.clearTouchMoved)); installDebouncedScroll(80, this.results); this.dropdown.on("scroll-debounced", resultsSelector, this.bind(this.loadMoreIfNeeded)); @@ -1483,6 +1486,14 @@ the specific language governing permissions and limitations under the Apache Lic this.results.find(".select2-highlighted").removeClass("select2-highlighted"); }, + touchMoved: function() { + this._touchMoved = true; + }, + + clearTouchMoved: function() { + this._touchMoved = false; + }, + // abstract countSelectableResults: function() { return this.findHighlightableChoices().length; @@ -1715,6 +1726,10 @@ the specific language governing permissions and limitations under the Apache Lic // abstract selectHighlighted: function (options) { + if (this._touchMoved) { + this.clearTouchMoved(); + return; + } var index=this.highlight(), highlighted=this.results.find(".select2-highlighted"), data = highlighted.closest('.select2-result').data("select2-data");