我有一个模式窗口,这有助于格式化文本。 我把窗户上的多个文本域。 该模式不应该被连接到一个特定的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