2010-09-16 4 views
1

Выполнить это в IE 7,8 или 9.IE input.value на странице обновления

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset=utf-8> 
    <title>IE input value</title> 
</head> 
<body> 
    <form action=""> 
     <input id="test" type="text" name="username"> 
    </form> 
    <script> 
     var input = document.getElementById("test"); 
     alert(input.value); 
     setTimeout(function() { 

      alert(input.value); 
     }, 2000); 
    </script> 
</body> 
</html> 

Если ввести значение вручную, а затем нажмите «обновить», первый тревожный сигнал пуст, вторые предупреждения независимо вы набрали, поэтому кажется, что IE занимает немного больше времени, чтобы снова «автоматически заполнить» поле.

Вопрос: кто-нибудь еще испытывает это, и если да: есть ли лучший способ, чем использовать setTimeout здесь?

BTW: Firefox предупреждает, что вы набрали два раза (как и следовало ожидать).

ответ

1

Да, это известное поведение IE.

К сожалению, браузеры реализовать память значения формы по-разному:

  • Mozilla и WebKit заменить значение HTML с запомненного значения, как только будет загружен элемент в документ;
  • IE заменяет значение, когда содержимое документа полностью загружено;
  • Опера заменяет значение только после Содержимое документа загружается, возможно после того, как событие load срабатывает на window.

(Есть также браузер разногласия по поводу при каких обстоятельствах перезарядка вызывает поля формы, чтобы помнить, и браузеры с bfcache причинит памяти поля произойдет меньше, как больше назад/вперед навигаций перепускной перезагрузки страницы.)

Усугубляет это означает, что если вы хотите написать скрипт, который проверяет значения форм и обновляет содержимое страницы, зависящее от них , надежно, вам нужно запланировать тайм-аут 0-задержки от window.onload -and, если вы хотите, чтобы он реагировал быстрее, чем onload , до этого тоже (например, сразу и/или на poller).

+0

Спасибо, теперь я чувствую себя немного менее сумасшедшим. – Daniel

Смежные вопросы