Функция javascript select () с именованным якорем

Я хочу использовать функцию 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>

Я не уверен, что понимаю ваш вопрос. Кажется, я не могу воспроизвести поведение, которое вы описываете. Не могли бы вы изменить свой вопрос?

Tom 03.12.2008 23:13

Какая версия? IE6? IE7?

Chris MacDonald 03.12.2008 23:38

Какова цель URL-адреса действия, имеющего "#ATag"? IE перенесет вас на Test.html? AText = Enter + text + here. FF приведет вас к Test.html? AText = Enter + text + here. # ATag

Chris MacDonald 03.12.2008 23:42

Крис: У меня проблема с IE7. #ATag должен прокручивать страницу мимо всех этих тегов br до якоря с именем ATag (который, как я только что понял, я не включил в свой образец, извините. Сейчас я его отредактирую). Я сделал форму GET, поэтому чтобы вы могли увидеть разницу URL-адресов, которую вы описываете.

Jon Wilson 05.12.2008 18:08

Том, я пытаюсь создать форму ввода данных, в которой вам не нужно использовать мышь. Каждый раз, когда поле заполняется и нажимается Enter, страница перезагружается, но я хочу, чтобы фокус возвращался в поле для следующей записи. Имеет ли это смысл?

Jon Wilson 05.12.2008 18:15
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
5
9 116
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();
}

Это далеко не идеально, но должно работать для ваших целей.

Другие вопросы по теме