插入文本浏览器中的当前位置的光标(Insert text on the current place

2019-09-01 03:26发布

我有一个模式窗口,这有助于格式化文本。 我把窗户上的多个文本域。 该模式不应该被连接到一个特定的textarea的,所以当我在模态窗口按图标,我需要插入一个字符串/表情等在那里的一次光标目前。 我的问题,我怎么知道在哪个元素(文本域/输入/等等)光标目前在?

Answer 1:

所有的浏览器的最新版本支持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);
  }
}


Answer 2:

似乎没有成为一个像财产isfocused ,你可以只检查,以确定一个特定的文本字段是否具有焦点。 但是,您可以创建的事件处理程序onFocus事件为每个文本框,并使其在新的重点文本框的记录ID的变量,以便您可以稍后检查。

此外,您还可能有兴趣在本教程中 ,它告诉你如何在给定的领域内当前光标位置插入文本(一旦你确定哪些领域集中,例如,使用上述方法)。



文章来源: Insert text on the current place of the cursor in the browser