Функция выбора JavaScript () с именованным якорем - PullRequest
1 голос
/ 03 декабря 2008

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

1 Ответ

1 голос
/ 04 декабря 2008

Насколько я могу судить, это ошибка в 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();
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...