3

テキストの書式設定に役立つモーダルウィンドウがあります。ウィンドウに複数のテキストエリアがあります。モーダルは特定のテキストエリアにアタッチしないでください。そのため、モーダルウィンドウでアイコンを押すと、カーソルが現在ある場所に文字列/絵文字などを挿入する必要があります。私の質問、カーソルが現在どの要素(textarea / input / whatever)にあるかを知るにはどうすればよいですか?

4

2 に答える 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 に答える