Вставить текст в текущее место курсора в браузере - PullRequest
3 голосов
/ 25 октября 2009

У меня есть модальное окно, которое помогает форматировать текст. У меня есть несколько текстовых полей на окне. Модал не должен быть привязан к определенной текстовой области, поэтому, когда я нажимаю иконку в модальном окне, мне нужно вставить строку / смайлик и т. Д., Где бы ни находился курсор в данный момент. Мой вопрос, как узнать, в каком элементе (textarea / input / what) курсор находится в данный момент?

Ответы [ 2 ]

4 голосов
/ 11 декабря 2009

Последняя версия всех браузеров поддерживает document.activeElement. Это скажет вам, какое поле в настоящее время имеет фокус в этом окне (там находится курсор). Затем вам нужно знать, как вставить текст в текущей позиции курсора. Следующая функция делает именно это.

// Author: http://alexking.org/blog/2003/06/02/inserting-at-the-cursor-using-javascript
// Modified so it's safe across browser windows
function insertAtCursor(myField, myValue) {
  var doc = myField.ownerDocument;
  //IE support
  if (doc.selection) {
    myField.focus();
    sel = doc.selection.createRange();
    sel.text = myValue;
  }
  //FF, hopefully others
  else if (myField.selectionStart || myField.selectionStart == '0') {
    var startPos = myField.selectionStart;
    var endPos = myField.selectionEnd;
    myField.value = myField.value.substring(0, startPos) + 
                    myValue + myField.value.substring(endPos, myField.value.length);
  } 
  // fallback to appending it to the field
  else {
    myField.value += myValue;
  }
}

Следовательно, из вашего всплывающего окна ваш обработчик кнопок должен вызвать следующий метод

// Pardon my contrived function name
function insertTextIntoFocusedTextFieldInOpener(text) {
  var field = window.opener.document.activeElement;
  if (field.tagName == "TEXTAREA" || (field.tagName == "INPUT" && field.type == "text" ) {
    insertAtCursor(field, text);
  }
}
0 голосов
/ 25 октября 2009

Кажется, что нет такого свойства, как isfocused, которое вы можете просто проверить, чтобы определить, находится ли конкретное текстовое поле в фокусе. Однако вы можете создать обработчик события для события onFocus для каждого из текстовых полей и указать в нем идентификатор записи вновь ориентированного текстового поля в переменной, чтобы вы могли проверить его позже.

Кроме того, вас может заинтересовать это руководство , в котором рассказывается, как вставить текст в текущей позиции курсора в заданном поле (как только вы определили, на какое поле фокусируется, например, используя выше метод).

...