37

ドキュメントにGoogleMapsAPIの地図を含めたいと思います。ドキュメントにはonload()、本体のイベントによって呼び出される関数を使用してマップを初期化するように指示されています。

通常の呼び出し方法:

<body onload="initialize_map();">

Template::Toolkit使用していて、<body>タグが既にラッパーに含まれているため、これはうまくいきません。つまり<body>、Javascriptコードの実行が開始されたときに、タグはすでに出力されています。

私はこのようなことを試しましたが、それはに対してのみ機能しonclick、ではありませんonload<body>これは、Javascriptコードがタグ自体の下にあるためだと思います。

var body = document.getElementsByTagName("body")[0];

body.addEventListener("load", init(), false);

function init() {
        alert("it works!");
};

グーグルマップマップを起動する方法の助けはありがたいです!

4

5 に答える 5

46
body.addEventListener("load", init(), false);

そのinit()は、この関数を今すぐ実行し、それが返すものをすべてloadイベントに割り当てると言っています。

必要なのは、結果ではなく、関数への参照を割り当てることです。したがって、()を削除する必要があります。

body.addEventListener("load", init, false);

また、body.onloadではなくwindow.onloadを使用する必要があります

addEventListenerIE8を除くほとんどのブラウザでサポートされています。

于 2011-02-22T18:26:40.543 に答える
42

代わりに、実際には次のものを使用する必要があります(すべての新しいブラウザーで機能します)。

window.addEventListener('DOMContentLoaded', init, false);
于 2014-06-15T17:02:36.320 に答える
19

@epascarelloがW3C標準ブラウザについて述べたように、次を使用する必要があります。

body.addEventListener("load", init, false);

ただし、IE <9でも機能させたい場合は、次を使用できます。

var prefix = window.addEventListener ? "" : "on";
var eventName = window.addEventListener ? "addEventListener" : "attachEvent";
document.body[eventName](prefix + "load", init, false);

または、1行で表示したい場合:

document.body[window.addEventListener ? 'addEventListener' : 'attachEvent'](
    window.addEventListener ? "load" : "onload", init, false);

注:ここでは、ドキュメントを介してbody要素への直接参照を取得し、最初の行の必要性を節約しています。

DOM readyまた、jQueryを使用していて、本文ではなくイベントを使用したい場合はload、答えをさらに短くすることができます...

$(init);
于 2012-12-12T11:47:04.910 に答える
8

グラフィカルな目玉機能にすでにjQueryを使用していたため、これを使用することになりました。次のようなコード

$(document).ready(function() {
    // any code goes here
    init();
});

私たちが望むすべてのことを行い、ブラウザの非互換性をそれ自体で気にしました。

于 2011-02-24T09:07:53.587 に答える
3

実行するコードをウィンドウオブジェクトのonloadイベントにラップするだけです。

window.onload = function(){ 
   // your code here
}
于 2011-02-22T18:27:17.517 に答える