2009-10-25 108 views
3

我有一个模式窗口帮助格式化文本。 我在窗口上有多个textareas。 该模式不应该附加到特定的textarea,所以当我在模式窗口中按下图标时,我需要插入一个字符串/表情符号等 - 永远光标当前。 我的问题,我如何知道光标目前在哪个元素(textarea/input/whatever)中?在浏览器的光标当前位置插入文本

回答

3

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

似乎没有像isfocused这样的属性,您只需检查以确定某个特定文本字段是否具有焦点。但是,您可以为每个文本框创建onFocus事件的事件处理程序,并让它将新聚焦的文本框的ID记录在变量中,以便稍后进行检查。

此外,您可能会对this tutorial感兴趣,它会告诉您如何在给定字段内的当前光标位置插入文本(例如,使用上述方法确定了哪个字段已聚焦后)。

相关问题