2011-08-12 23 views
0

次のコードは関数内では機能しませんが、関数の外では完全に機能する理由は誰にも説明できますか?コンソールからそれを実行するdocument.forms.length関数は関数の外で0を返します。

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

は「未定義」を返しますが、私はちょうどコンソールから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> 

フレームが表示されないので、タグ内にプレーンなHTMLとフォームが表示されます。

+0

は、あなたの関数を呼び出していますか? –

+0

コンソールから実行しました。ページが実行された後。私はページが完成するまで待ってから書きます。そして、もし私が関数に入れてしまえば、document.forms.lengthが関数の外でうまく動作するので、それが違いを生むのではないかと疑います。 – 133794m3r

+0

どのようなフレームが関係していますか? – lonesomeday

答えて

2

あなたが持っている関数は何も返しません(つまり、実行すると、undefinedを返します)。代わりにこれを試してみてください:

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

をまた、あなたはちょうどそれがコンソールに、あなたはまだundefinedを取得します実行する場合、あなたはまだ関数を呼び出していないだから。あなたはそれを作成しているだけですが、まだ実行されていません。

コンソールでそれを実行したい場合は、単にコンソールでdocument.forms.lengthを書く場合lengthが可変であるので、あなたは

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

最後を書くことができ、コンソールは、あなたに値が表示されます。そういうわけで、それがうまくいくように思えました。

+0

私のオリジナルのものはconsole.logでしたが、まだそれをしたくない別の機能です。そして帰ってきても、未定義の価値は本当に助けにならないでしょう。 – 133794m3r

+0

@ 133794m3r:元のもの?あなたが 'function(){console.log(document.forms.length);}'をコンソールに書いたとしても、まだ関数を作成せず、実行していません。しかし '(function(){console.log(document.forms.length);}())'を書くと、関数を実行し、コンソールに長さを記録します。私はちょうどそれ自身を試して以来、私はそれが動作することを保証することができます – Flambino

+0

なぜ、次のものが動作していないのですか?もともと、それは機能自体と関係があると思っていました。私はこれを呼び出す関数を持っており、常に以下の変数 "len"が0であると言います。var len = document.forms.length;そしてそれはそれ自身の機能から走っています。私はもともと、「機能の中で」のことが問題であると考えて書きました。今、私はこの記事を閉じて、その完全なコードで新しいものを開くか、これを永遠にここに残す必要があるかどうかは分かりません。 – 133794m3r

0

これは応答しない理由が、あなたはそれを返す場合、それは動作します:あなたのHTMLがレンダリングされる前に

function aa(){ 
    return document.forms.length; 
} 
関連する問題