From 636d39139ad7f3646ca4ce9e93f821834097f4ec Mon Sep 17 00:00:00 2001 From: Kolia Morev Date: Mon, 5 Sep 2011 14:02:49 +0400 Subject: [PATCH 1/2] fix issue #41 Characters out of order on android web browsers Android browser has a bug in setSelectionRange function as described in http://code.google.com/p/android/issues/detail?id=15245 http://stackoverflow.com/questions/4861698/focus-textarea-with-caret-after-text-in-android-browser http://stackoverflow.com/questions/6103476/android-keyboard-and-javascript I used a workaround suggested in one of the links. Since android browser cannot be reliably detected, we just add setting for it (for example tablet browser with mobile mode switched off). --- src/jquery.maskedinput.js | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/jquery.maskedinput.js b/src/jquery.maskedinput.js index af67604..e8aaf81 100644 --- a/src/jquery.maskedinput.js +++ b/src/jquery.maskedinput.js @@ -7,6 +7,7 @@ (function($) { var pasteEventName = ($.browser.msie ? 'paste' : 'input') + ".mask"; var iPhone = (window.orientation != undefined); + var enableSetSelectionRangeBugWorkaround = false; $.mask = { //Predefined character definitions @@ -26,7 +27,13 @@ end = (typeof end == 'number') ? end : begin; return this.each(function() { if (this.setSelectionRange) { - this.setSelectionRange(begin, end); + if (enableSetSelectionRangeBugWorkaround) { + var that = this; + setTimeout(function () { that.setSelectionRange(begin, end); }, 0); + } + else { + that.setSelectionRange(begin, end); + } } else if (this.createTextRange) { var range = this.createTextRange(); range.collapse(true); @@ -55,8 +62,18 @@ } settings = $.extend({ placeholder: "_", - completed: null - }, settings); + completed: null, + enableSetSelectionRangeBugWorkaround: false + }, settings); + + // workaround for bug on android described in + // http://code.google.com/p/android/issues/detail?id=15245 + // http://stackoverflow.com/questions/4861698/focus-textarea-with-caret-after-text-in-android-browser + // http://stackoverflow.com/questions/6103476/android-keyboard-and-javascript + // since android browser cannot be reliably detected, we just add + // setting for it (for example tablet browser with mobile mode switched off) + + enableSetSelectionRangeBugWorkaround = settings.enableSetSelectionRangeBugWorkaround; var defs = $.mask.definitions; var tests = []; From 43990bd889799a6f59e3a93b66fb7f399bfd97e2 Mon Sep 17 00:00:00 2001 From: Kolia Morev Date: Mon, 5 Sep 2011 14:28:53 +0400 Subject: [PATCH 2/2] fix typo --- src/jquery.maskedinput.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/jquery.maskedinput.js b/src/jquery.maskedinput.js index e8aaf81..26fa5c5 100644 --- a/src/jquery.maskedinput.js +++ b/src/jquery.maskedinput.js @@ -32,7 +32,7 @@ setTimeout(function () { that.setSelectionRange(begin, end); }, 0); } else { - that.setSelectionRange(begin, end); + this.setSelectionRange(begin, end); } } else if (this.createTextRange) { var range = this.createTextRange();