1

私はjavascriptを初めて使用しますが、このスクリプトでは、document.writeinnerHTMLが機能しないのになぜうまく機能するのか疑問に思いました(本文にdiv idタイマーを指定しました)。innerHTMLにはhtmlの本文部分にOnloadイベントが必要ですか?もしそうなら、なぜですか?(私はwritehere()htmlドキュメントのheadセクションで関数を呼び出しています。

<script language="javascript">

 function writehere()

 {
       document.write("hello");

       var Timer = document.getElementById("timer");

        Timer.innerHTML = "hello";


}

writehere();

</script>

htmlコードはここにあります.....

4

3 に答える 3

1

ほとんどの場合、問題は、コードが実行されるまでにDOMの準備ができていないことです。あなたの例では、おそらくそれをページの一番下に移動するだけで機能します。

一般に、DOMと対話する必要のあるJavaScriptを実行する前に、DOMが完全にロードされていることを確認する必要があります。たとえば、jQueryを使用している場合は、ドキュメント準備関数でコードを呼び出して、DOMがロードされていることを確認できます。

   $(document).ready({

    });

バニラJavaScriptの同等物については、このSOの質問をご覧ください

'$(document).ready()'に相当するjQuery以外の機能は何ですか?

于 2012-05-15T13:45:10.803 に答える
0

問題は、DOMがまだロードされていないため、id="Timer"のdiv要素がないことだと思います。onLoadイベントでこのメソッドを呼び出す必要があります。

于 2012-05-15T13:36:43.043 に答える
0

HTMLタグ要素と実行時間がすべてです。この例では、スクリプトはheadタグに配置されているため、スクリプトを実行すると、要素div#timerはまったく存在しません。

次に、2つの解決策があります。

DOMが複雑でなくimg、ネットワークからフェッチする必要のあるタグや要素が含まれていない場合は、を使用するonload必要はありません。次の2つの場合に使用できます。

  • 画像や動画など、すべての要素が読み込まれるのを待つ必要があります。
  • たとえば、サイトに広告を読み込むスクリプトなど、優先度の低いスクリプトの実行を遅らせたいとします。このスクリプトは、Webサイトや訪問者にとって重要ではなく、実行が遅れる可能性があります

一般にscript、ドキュメントの最後にタグを付けることをお勧めします(したがって、使用する必要はありませんonload)。これにより、Flash Of Unstyled Content(FOUC)が防止されます。Javascriptは、ブラウザのレンダリングエンジンをブロックします。したがって、ユーザーがコンテンツを利用できるようになる前にJavaScriptタグが配置されている場合(headタグ内を参照)、ブラウザーはJavaScriptタグを実行し、DOMはほとんど空になり、ユーザーにはこの実行時間中は空白のページしか表示されません。

また、jQuery.fn.ready方法については、次の点に注意する必要があります。

$(document).ready(function() {
    // my first useless function
    console.log( "first", 1 );
});

$(document).ready(function() {
    // my second useless function
    // this function will throw an (intentional) error
    console.log( "second", someUndefinedVariable );
});

$(document).ready(function() {
    // my third useless function
    // because the previous function contains an error
    // this function will never be called
    console.log( "third ", 3 );
});

それで、あなたがいくつかのプラグインを使用していて、いくつかの手書きのコードなどを持っているとしましょう。すべてのプラグインとコードがjQuery.fn.readyメソッドを使用していて、何らかの理由で(たとえば、特定のブラウザーバージョンで、ある状況下で)関数がエラーをスローした場合、この関数の後のすべてのハンドラーが実行されることはありません...

また、そうすることで、最後にすべての「実際の」JavaScriptの実行を遅らせることになります。キューで実行するメソッドがたくさんある場合は、数秒間ブラウザをブロックすると、ユーザーが通知します。それ。

于 2012-05-15T13:53:03.327 に答える