.clickAt() focuses the editable field Also, still .preventDefault() even if .ignoreNextMousedown()-ing, otherwise 300ms after a touch tap when the legacy mouse events fire on the container span (because the container span has a 'mousedown' event handler [1]), "clicking" on the container span, it would blur the textarea (just like a real click would unless you .preventDefault()). [1]: > A clickable element is a link, form element, image map area, or any > other element with mousemove, mousedown, mouseup, or onclick handlers. https://developer.apple.com/library/ios/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html
diff --git a/src/publicapi.js b/src/publicapi.js index 162e438..f5df089 100644 --- a/src/publicapi.js +++ b/src/publicapi.js
@@ -145,6 +145,7 @@ var ctrlr = this.__controller, root = ctrlr.root; if (!jQuery.contains(root.jQ[0], target)) target = root.jQ[0]; ctrlr.seek($(target), clientX + pageXOffset, clientY + pageYOffset); + if (ctrlr.blurred) this.focus(); return this; }; _.ignoreNextMousedown = function(fn) {
diff --git a/src/services/mouse.js b/src/services/mouse.js index acdf7a7..b2b543a 100644 --- a/src/services/mouse.js +++ b/src/services/mouse.js
@@ -13,6 +13,9 @@ var ctrlr = root.controller, cursor = ctrlr.cursor, blink = cursor.blink; var textareaSpan = ctrlr.textareaSpan, textarea = ctrlr.textarea; + e.preventDefault(); // doesn't work in IE≤8, but it's a one-line fix: + e.target.unselectable = true; // http://jsbin.com/yagekiji/1 + if (cursor.options.ignoreNextMousedown(e)) return; else cursor.options.ignoreNextMousedown = noop; @@ -46,8 +49,6 @@ if (!ctrlr.editable) rootjQ.prepend(textareaSpan); textarea.focus(); } - e.preventDefault(); // doesn't work in IE≤8, but it's a one-line fix: - e.target.unselectable = true; // http://jsbin.com/yagekiji/1 cursor.blink = noop; ctrlr.seek($(e.target), e.pageX, e.pageY).cursor.startSelection();
diff --git a/test/unit/publicapi.test.js b/test/unit/publicapi.test.js index 4a81f74..9264c3e 100644 --- a/test/unit/publicapi.test.js +++ b/test/unit/publicapi.test.js
@@ -779,7 +779,9 @@ var clientY = box.top + 40; var target = document.elementFromPoint(clientX, clientY); + assert.equal(document.activeElement, document.body); mq.clickAt(clientX, clientY, target).write('x'); + assert.equal(document.activeElement, $(mq.el()).find('textarea')[0]); assert.equal(mq.latex(), "\\frac{mmmm}{mmxmm}"); @@ -801,7 +803,9 @@ var clientX = box.left + 30; var clientY = box.top + 40; + assert.equal(document.activeElement, document.body); mq.clickAt(clientX, clientY).write('x'); + assert.equal(document.activeElement, $(mq.el()).find('textarea')[0]); assert.equal(mq.latex(), "\\frac{mmmm}{mmxmm}");