41

テキストボックスとリンクボタンがあります。いくつかのテキストを書き、それらのいくつかを選択してリンクボタンをクリックすると、テキストボックスから選択されたテキストがメッセージボックスで表示される必要があります。

どうすればいいですか?


下のテキスト ボックスの送信ボタンをクリックすると、メッセージ ボックスに Lorem ipsum が表示される必要があります。エリアで「Lorem ipsum」が選択されているためです。


ページからテキストを選択して送信ボタンをクリックすると機能しますが、テキストボックスにテキストを書き込んで作成すると機能しません。別のスペースをクリックすると、テキストボックスの選択がキャンセルされるためです。

問題は、テキストボックスからテキストを選択して他のコントロールまたはスペースをクリックすると、選択されているテキストがまだ選択されている必要があることです。

それはどのように行われますか?

4

6 に答える 6

43

OK、ここに私が持っているコードがあります:

function ShowSelection()
{
  var textComponent = document.getElementById('Editor');
  var selectedText;

  if (textComponent.selectionStart !== undefined)
  {// Standards Compliant Version
    var startPos = textComponent.selectionStart;
    var endPos = textComponent.selectionEnd;
    selectedText = textComponent.value.substring(startPos, endPos);
  }
  else if (document.selection !== undefined)
  {// IE Version
    textComponent.focus();
    var sel = document.selection.createRange();
    selectedText = sel.text;
  }

  alert("You selected: " + selectedText);
}

問題、IE 用に提供したコードは多くのサイトで提供されていますが、現在のシステムの IE6 のコピーで動作させることができません。おそらくそれはあなたのために働くでしょう、それが私がそれを与える理由です。
あなたが探しているトリックは、おそらく .focus() 呼び出しで、テキストエリアにフォーカスを戻して、選択が再度アクティブになるようにします。

[更新] onKeyDown イベントで正しい結果 (選択内容) が得られました。

document.onkeydown = function (e) { ShowSelection(); }

したがって、コードは正しいです。繰り返しますが、問題はボタンをクリックして選択を取得することです...検索を続けます。

[更新] タグで描画されたボタンでは成功しませんでしたli。これは、クリックすると IE が前の選択を解除するためです。上記のコードは単純なinputボタンで動作しますが...

于 2008-11-09T10:57:54.013 に答える
2

Opera、Firefox、および Safari では、次の機能を使用できます。

function getTextFieldSelection(textField) {
    return textField.value.substring(textField.selectionStart, textField.selectionEnd);
}

次に、テキスト フィールド要素 (textarea や input 要素など) への参照を関数に渡すだけです。

alert(getTextFieldSelection(document.getElementsByTagName("textarea")[0]));

または、 <textarea> と <input> に独自の getSelection() 関数を持たせたい場合:

HTMLTextAreaElement.prototype.getSelection = HTMLInputElement.prototype.getSelection = function() {
    var ss = this.selectionStart;
    var se = this.selectionEnd;
    if (typeof ss === "number" && typeof se === "number") {
        return this.value.substring(this.selectionStart, this.selectionEnd);
    }
    return "";
};

次に、次のようにします。

alert(document.getElementsByTagName("textarea")[0].getSelection());
alert(document.getElementsByTagName("input")[0].getSelection());

例えば。

于 2008-11-09T10:09:50.287 に答える