带有命名锚点的javascript select()函数

时间:2008-12-03 19:33:57

标签: javascript html anchor html-select

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

filename: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>

1 个答案:

答案 0 :(得分: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();
}

这远非完美,但应该适用于您的目的。