diff --git a/app/assets/javascripts/posts.js b/app/assets/javascripts/posts.js index a236cb4f2..998c2c7cd 100644 --- a/app/assets/javascripts/posts.js +++ b/app/assets/javascripts/posts.js @@ -51,17 +51,26 @@ return false; }, select: function(event, ui) { - this.value = this.value.replace(/\S+\s*$/g, ui.item.value + " "); + var before_caret_text = this.value.substring(0, this.selectionStart); + var after_caret_text = this.value.substring(this.selectionStart); + + this.value = before_caret_text.replace(/\S+\s*$/g, ui.item.value + " "); + + // Preserve original caret position to prevent it from jumping to the end + var original_start = this.selectionStart; + this.value += after_caret_text; + this.selectionStart = this.selectionEnd = original_start; + return false; }, source: function(req, resp) { - var pre_caret_text = req.term.substring(0, this.element.get(0).selectionStart); + var before_caret_text = req.term.substring(0, this.element.get(0).selectionStart); - if (pre_caret_text.match(/ $/)) { + if (before_caret_text.match(/ $/)) { return; } - var term = pre_caret_text.match(/\S+/g).pop(); + var term = before_caret_text.match(/\S+/g).pop(); $.ajax({ url: "/tags.json", data: {