1

JavaScript の select() 関数を使用してフォームのテキスト フィールドを強調表示したいのですが、最初に名前付きアンカーを使用して、ページが適切なセクションにスクロールされるようにします。次のコードは Firefox ではうまく機能しますが (同じ値を 2 回入力しない限り)、IE では、ページが 2 回目に読み込まれたときに、ハイライトされたテキストを (タブやクリックなしで) 上書きすることはできません。これを回避するにはどうすればよいですか、それとも間違っていますか?

ファイル名: Test.html

<HTML>
<HEAD>
    <script>
    function setFocus() {   
        document.AForm.AText.select();
    }
    </script>

</HEAD>

<BODY onLoad="setFocus();">
    <br><br><br><br><br><br><br><br><br><br><br><br><br><br>
    <br><br><br><br><br><br><br><br><br><br><br><br><br><br>
    <br><br><br><br><br><br><br><br><br><br><br><br><br><br>
    <br><br><br><br><br><br><br><br><br><br><br><br><br><br>

    <a name="ATag"></a>
    <form name="AForm" id="AForm" action="Test.html#ATag" method="get">        
        <input type="text" name="AText" id="AText" value="Enter text here." >
        <input type="submit" value="OK">
    </form>

</BODY>
</HTML>
4

1 に答える 1

1

私が知る限り、これは IE のバグのようです。タイミング関係のようです。私は回避策を見つけましたが、それはあまりエレガントではなく、何が間違っているのかについて私に光を当てません。

おそらく、別のユーザーが私の回避策から何らかの洞察を得るでしょう。いずれにせよ、これは私にとってはうまくいきます:

function setFocus() {
  setTimeout(tryFocus,100);
}

function tryFocus() {
  document.AForm.AText.select();
}

おまけに、同じ値を 2 回続けて送信したときに FireFox が機能しないという問題は、前の GET と同じであるため、2 回目の GET が送信されないことです。キャッシュバスターが必要です。したがって、フォームを次のように変更します。

<form name="AForm" id="AForm" action="index.html#ATag" method="get" onsubmit="bustCache();">
  <input type="text" name="AText" id="AText" value="Enter text here." >
  <input type="hidden" name="AHidden" id="AHidden" value="">
  <input type="submit" value="OK">
</form>

スクリプトを次のように変更します。

function setFocus() {
  setTimeout(tryFocus,100);
}

function tryFocus() {
  document.AForm.AText.select();
}

function bustCache() {
  document.AForm.AHidden.value = (new Date()).getTime();
}

これは完璧にはほど遠いですが、目的には合うはずです。

于 2008-12-03T22:13:14.103 に答える