我想使用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>
答案 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();
}
这远非完美,但应该适用于您的目的。