<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()框并使用提交按钮触发,在这种情况下执行了它,但为什么它不在此阶段执行。
答案 0 :(得分:3)
首先,有几个逻辑/设计错误:
document.readyState
(大写不同)。<head>
部分时,您的文档永远不会有document.readyState == "interactive"
,因为文档在解析<body>
之前不会切换到该状态,但根据定义它是此刻只解析<head>
部分。readyState
成为== "interactive"
时您的代码会以某种方式触发,那么这不是简单if
语句的工作方式。它会在代码运行时测试该条件,如果它是falsey
,那么它将永远不会执行。如果您想在加载文档并且DOM已准备好修改和交互时运行代码,您可以在this answer中查看选项摘要。
您的选择归结为:
将您的javascript移至</body>
标记之前的脚本标记,然后移除您拥有的if
测试。在文档解析的那一点上,可以安全地与脚本之前定义的任何DOM元素进行交互。
在现代浏览器中,为DOMContentLoaded
事件添加事件侦听器,并在事件触发时运行代码。
要获得包括旧版浏览器在内的更多常规支持,请获取更完整的函数实现,以便在浏览器可以安全地进行交互时通知您。您可以在this other answer.
使用某种已经为您提供跨浏览器方式的javascript框架来了解DOM何时就绪。 jQuery提供$(document).ready()
和几乎所有其他类似的框架一样。
这个最简单的代码解决方案是:
<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>