2009-10-25 98 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感興趣,它會告訴您如何在給定字段內的當前光標位置插入文本(例如,使用上述方法確定了哪個字段已聚焦後)。

相關問題