Я хочу использовать функцию 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>
Какая версия? IE6? IE7?
Какова цель URL-адреса действия, имеющего "#ATag"? IE перенесет вас на Test.html? AText = Enter + text + here. FF приведет вас к Test.html? AText = Enter + text + here. # ATag
Крис: У меня проблема с IE7. #ATag должен прокручивать страницу мимо всех этих тегов br до якоря с именем ATag (который, как я только что понял, я не включил в свой образец, извините. Сейчас я его отредактирую). Я сделал форму GET, поэтому чтобы вы могли увидеть разницу URL-адресов, которую вы описываете.
Том, я пытаюсь создать форму ввода данных, в которой вам не нужно использовать мышь. Каждый раз, когда поле заполняется и нажимается Enter, страница перезагружается, но я хочу, чтобы фокус возвращался в поле для следующей записи. Имеет ли это смысл?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Насколько я могу судить, это похоже на ошибку в 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();
}
Это далеко не идеально, но должно работать для ваших целей.
Я не уверен, что понимаю ваш вопрос. Кажется, я не могу воспроизвести поведение, которое вы описываете. Не могли бы вы изменить свой вопрос?