2

強調表示されたテキストを読み取るコードがいくつかあります。しかし、JavaScript で関数に変数を割り当てるのに問題があります。期待どおりに関数を正しく呼び出しません。

<html>
<head>
<script type="text/javascript">

function getSelectionText()
{
    var text = "";
    if (window.getSelection)
    {
        text = window.getSelection().toString();
    }

    return text;
}

var txt = getSelectionText();   //<-----This is not working???

</script>
</head>
<body>
<p id="p1">Select some of this text then press the button<br /></p>

<button onclick= document.write(txt) >GetText</button>
</body>

</html>

書き込みパラメーターで関数を使用すると、機能します。

<button onclick= document.write(getSelectionText()) >GetText</button>

関数に変数を代入すると、関数が正しく呼び出されないのはなぜですか?

-スコット

4

4 に答える 4

4

ページが読み込まれるときに呼び出しgetSelectionText()ているため、その時点で選択されているテキストはありません。

イベント ハンドラから呼び出す必要があります。

さらに、あなたは:

  • 固有のイベント属性を使用する (これはすべきではありません)
  • 属性値を引用しない (これは悪い習慣です)
  • ドキュメントがロードされた後に呼び出そうとしてdocument.writeいます (閉じた状態の場合)
于 2012-08-23T22:34:05.977 に答える
0

関数が呼び出されたときに変数を割り当てることではありません。

作業バージョンでは、ボタンが押されると getSelectionText() が呼び出されます。機能しないバージョンでは、<script>タグが読み込まれるとすぐに getSelectionText() が呼び出されます...そしてボタンが押されると、その前の呼び出しの結果が使用されます。

ボタンが押されたときに関数が呼び出されるようにする必要があるため、それを明示的に行う必要があります。

于 2012-08-23T22:38:03.843 に答える
0

私はあなたのコードを機能させました。ほとんどの場合。基本的に、私は変数に依存しておらずtxt、メイン関数を使用して Web ページに出力しています。これを試してみて、改善したい点を見つけてみませんか。

于 2012-08-23T22:40:52.383 に答える
0

行 var txt = ... は、グローバル変数 txt を getSelectionTxt() からの戻り値に初期化しています

グローバルがどのように初期化されるかを理解する鍵は、必ずしも HTML DOM がロードされるときではなく、javascript がロードされるときに割り当てが行われることを理解することです。その結果、多くの場合、DOM の他の部分の準備が整う前に、グローバル割り当てが評価されるのが早すぎます。

遅延を行う 1 つの方法は、body.onload イベントまたは関数を使用することです。body タグでイベントを設定できます。たとえば、ここでは適切なタイミングで関数を呼び出します。

<body onload="initializeMyGlobalsFromDom()">

initializeMyGlobalsFromDom は、行 txt = getSelectionTxt(); を含む関数です。// 注: var キーワードを省略して、txt をグローバルとして参照します

(関数の外で「var txt;」を宣言し続ける必要があります。ベスト プラクティスは、関数内で使用する前に言うかもしれません。)

HTML タグに属性を必要とせずにイベントをフックする方法もあります。グローバルコンテキスト( var txt = ... がある場所)では、次のことができます

window.addEventListener("onload",initializeMyGlobalsFromDom);

あなたが持っている別のオプションは、次のように、関数自体をグローバル変数に割り当てることです。

var txtFn = getSelectionText; // 関数の戻り値ではなく、関数の代入に注意してください

次に、グローバル変数を使用するときは、それを呼び出す必要があります。

<button onclick="document.write(txt())">GetText</button>
于 2012-08-23T22:47:29.380 に答える