为什么document.readystate不工作

时间:2014-04-25 20:01:34

标签: javascript

<html>
<head>
<script>
if(document.readystate == "interactive"){
alert(document.forms[0].method);
}
</script>
</head>
<body>
<form name="form1" id="form1" method="post">

</form>
<input type="submit" id="submit" name="check" onclick="check()">

</body>
</html>

我还在函数中编写了alert()框并使用提交按钮触发,在这种情况下执行了它,但为什么它不在此阶段执行。

1 个答案:

答案 0 :(得分:3)

首先,有几个逻辑/设计错误:

  1. document.readyState(大写不同)。
  2. 在解析<head>部分时,您的文档永远不会有document.readyState == "interactive",因为文档在解析<body>之前不会切换到该状态,但根据定义它是此刻只解析<head>部分。
  3. 如果您认为在readyState成为== "interactive"时您的代码会以某种方式触发,那么这不是简单if语句的工作方式。它会在代码运行时测试该条件,如果它是falsey,那么它将永远不会执行。
  4. 如果您想在加载文档并且DOM已准备好修改和交互时运行代码,您可以在this answer中查看选项摘要。

    您的选择归结为:

    1. 将您的javascript移至</body>标记之前的脚本标记,然后移除您拥有的if测试。在文档解析的那一点上,可以安全地与脚本之前定义的任何DOM元素进行交互。

    2. 在现代浏览器中,为DOMContentLoaded事件添加事件侦听器,并在事件触发时运行代码。

    3. 要获得包括旧版浏览器在内的更多常规支持,请获取更完整的函数实现,以便在浏览器可以安全地进行交互时通知您。您可以在this other answer.

    4. 中看到这样的实现在几乎所有正在使用的浏览器中都有效
    5. 使用某种已经为您提供跨浏览器方式的javascript框架来了解DOM何时就绪。 jQuery提供$(document).ready()和几乎所有其他类似的框架一样。


    6. 这个最简单的代码解决方案是:

      <html>
      <head>
      </head>
      <body>
      <form name="form1" id="form1" method="post">
          <input type="submit" id="submit" name="check" onclick="check()">
      </form>
      
      <script>
      alert(document.getElementById("form1").method);
      </script>
      </body>
      </html>
      

      工作演示:http://jsfiddle.net/jfriend00/Ka4rL/

      P.S。我认为您希望表单中包含<input>标记。而且,我建议您更改为使用document.getElementById("form1")而不是forms[0],因为这是一种更强大的编程方式,因为如果有人向页面添加新表单,您的代码就不会中断。< / p>