我有一个模式窗口,可以帮助格式化文本。我在窗口上有多个文本区域。模态不应附加到特定的文本区域,因此当我在模态窗口中按下图标时,我需要在光标当前所在的任何位置插入字符串/表情符号等。我的问题,我怎么知道光标当前在哪个元素(textarea/input/whatever)中?
问问题
4481 次
2 回答
4
所有浏览器的最新版本都支持 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);
}
}
于 2009-12-10T21:46:57.410 回答
0
似乎没有这样的属性isfocused
,您可以检查以确定特定文本字段是否具有焦点。但是,您可以为每个文本框的事件创建一个事件处理程序onFocus
,并将新焦点文本框的 ID 记录在一个变量中,以便您以后检查它。
此外,您可能对本教程感兴趣,它告诉您如何在给定字段内的当前光标位置插入文本(一旦您确定了哪个字段被聚焦,例如使用上述方法)。
于 2009-10-25T20:13:43.380 回答