1

我想使用 JavaScript select() 函数突出显示表单上的文本字段,但首先我想使用命名锚点,以便页面滚动到正确的部分。以下代码在 Firefox 中运行良好,(除非您两次输入相同的值),但 IE 不允许在页面第二次加载时输入突出显示的文本(无需选项卡或单击)。我该如何解决这个问题,还是我做错了?

文件名: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();
}

作为奖励,当您连续两次发送相同的值时,FireFox 无法正常工作的问题是它没有发送您的第二个 GET,因为它与前一个 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 回答