3

このコードは、テキストエリアが選択されたときにテキストエリアのコンテンツを選択する必要があります。ただし、それ自体では機能しません。

        $("#form").focus(function() {
            $("#form").select();
        });

setTimeout次のように、0を指定した場合にのみ機能します。

        $("#form").focus(function() {
            setTimeout(function() {
                $("#form").select();
            }, 0);
        });

何故ですか?

4

2 に答える 2

1

最初のコード スニペットがテキストを選択してから選択解除しているようです。focusイベントが終了した後、テキストの選択が舞台裏で処理され、イベントsetTimeoutの後に実行されると思われますselect(舞台裏のものがすでに発生している場合)。

于 2012-07-12T00:45:08.570 に答える
1

この種のことを扱うときは、常に次のことを覚えておいてください。

ブラウザはシングルスレッドです。これは単純なモデルですが、次のように考えてください: イベント (キーストローク、マウス、タッチ、タイマーなど) を待ち、スクリプトを実行し、ページを更新します。

あなたがしていることは、ブラウザに、この繰り返しではなく次のsetTimeout(func, 0)繰り返しを行うように指示しているときです。そのため、form タグを解析する時間があります。または、幅または高さを扱っている場合は、項目を表示してその幅または高さを計算する時間がかかる場合があります (それらが 0 として読み取られるのではなく)。

おそらく、テキストエリアをフォーカスすることによって呼び出されるイベントのカスケード内の何かが、最終的にそのコンテンツの選択を解除することが起こっているのでしょう。選択を次の反復に移動することにより、フォーカスへの移行、すべての選択、すべての選択を解除してフォーカス、すべての選択を解除、すべての選択から変更します。

于 2012-07-12T01:03:43.067 に答える