页面刷新时的IE input.value

时间:2010-09-16 17:21:15

标签: javascript internet-explorer

在IE 7,8或9中运行。

<!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 个答案:

答案 0 :(得分:1)

是的,这是已知的IE行为。

不幸的是,浏览器以不同的方式实现了表单值内存:

  • 只要元素加载到文档中,Mozilla和WebKit就会用记住的值替换HTML值;
  • IE在文档内容完全加载时替换值;
  • Opera加载文档内容后,只需替换值,可能是load事件在window上触发后。

(关于在何种情况下重新加载导致表单字段被记住的浏览器存在差异,并且具有bfcache的浏览器将导致字段内存发生的次数减少,因为更多的后退/前进导航会绕过页面重新加载。)

恶意的是,这意味着如果您要编写一个脚本来检查表单值并更新依赖于它们的页面内容可靠,则必须从window.onload安排0延迟超时 - 并且,如果你希望它在{I}之前做出快速反应(例如,直接和/或在轮询器上)。