Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 函数内部的document.forms.length返回0,函数外部正常工作_Javascript_Forms_Dom - Fatal编程技术网

Javascript 函数内部的document.forms.length返回0,函数外部正常工作

Javascript 函数内部的document.forms.length返回0,函数外部正常工作,javascript,forms,dom,Javascript,Forms,Dom,有人能给我解释一下为什么下面的代码在函数内部不能工作,但在函数外部却能完美工作吗 function calculate_document_forms_length(){ document.forms.length; } 从控制台运行它会返回“undefined”,但当我从控制台运行document.forms.length时,它本身会返回页面上的表单数。我试着去理解为什么这不起作用,但我找不到原因。它发生在firefox和chrome中。我看没有理由不这样做 编辑以澄清一些事情 它在页

有人能给我解释一下为什么下面的代码在函数内部不能工作,但在函数外部却能完美工作吗

function calculate_document_forms_length(){
    document.forms.length;
}
从控制台运行它会返回“undefined”,但当我从控制台运行document.forms.length时,它本身会返回页面上的表单数。我试着去理解为什么这不起作用,但我找不到原因。它发生在firefox和chrome中。我看没有理由不这样做

编辑以澄清一些事情

它在页面加载完成后从控制台运行。下面返回正确的值

document.forms.length;
所以我不知道它为什么会这样

好的,这是测试HTML页面的确切来源

<html>
  <head>
    <title>test page 01</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <body>
    <form>
        <input type="text" name="test1" />
    </form>
    <form>
        <input type="text" name="tes2" />
    </form>
  </body>
</html>

测试第01页

正如您在标记中看到的,没有框架,只有纯HTML和表单。

您在那里使用的函数不会返回任何内容(即,当您运行它时,它“返回”
未定义的内容。请尝试以下方法:

function() {
    return document.forms.length;
}
另外,如果在控制台中仅运行该函数,仍然会得到未定义的
,因为您仍然没有调用该函数。您只是在创建它,但它仍然没有被执行

如果要在控制台中运行它,可以编写

(function() {
    return document.forms.length;
}());

最后,如果您只是在控制台中编写
document.forms.length
,控制台将显示该值,因为
length
是一个变量。这就是为什么它看起来有效。

这并不能回答为什么,但如果您返回它,它会起作用:

function aa(){
    return document.forms.length;
}

是否在呈现HTML之前调用函数?它是从控制台运行的。页面运行完成后。我等到这一页写完,然后再写。我怀疑如果我把它放在函数中或不放在函数中会有什么不同,因为document.forms.length在函数之外工作得很好。没有,如上所述,经过重新编辑,完整的代码在那里。我原来的一个做了一个console.log,它在另一个函数中,但它仍然不想做。返回对未定义的值没有帮助。@133794m3r:您原来的值?如果您在控制台中编写了
function(){console.log(document.forms.length);}
,您仍然只是在创建一个函数,而不是执行它。但是如果您编写
(function(){console.log(document.forms.length);}())
,它将创建并执行该函数,并在控制台中记录长度。我可以向你保证它是有效的,因为我自己刚刚试过,那么为什么下面的一个不起作用呢。我最初认为这与函数本身有关。我有一个函数调用它,它总是说下面的变量“len”是0。var len=document.forms.length;它是从函数本身运行的。我最初写这篇文章的想法是“函数内部”的问题。现在我不知道我应该关闭这个,打开一个带有完整代码的新的,还是永远留在这里。@133794m3r:如果它说
0
,那么它不是说
未定义的
-差别很大。我猜您是在页面加载完成之前调用函数的——在这种情况下,表单的数量实际上将为零。看看这个:很可能是这样。我忘了等待dom就绪,因为我习惯于只使用jquery。我写了一个小东西,用纯javascript写,看看我对这种奇怪的晦涩语言的记忆有多好。我将把你的答案记下来,因为我好像忘了。