質問: window.onloadでのfunction javascript初心者で質問自身が僕が解決したい問題の原因かどうかも解らずに質問しています。 上記のようにページheadにscriptを配置したとします。ページ上のbutton_1がクリックされると処理1が実行されるのですが、hoge_2のように引数を使ってしまうと、onload時に処理2を実行してしまい、button_2は有効に動作しません。 functionの引数の問題なのか、window.onloadの作法なのか、なにが悪いのか全く解らず質問しています。 ご指導のほどよろしくお願いいたします。
回答: 根本的な話として、イベントリスナ(イベントハンドラ)というのは「第一引数にイベントオブジェクトをとる関数」なのです。これはこういう定義ですので、何だかんだ言っても始まりません。 function onload (e /*イベントオブジェクト*/) { ; } であれば、そもそも「イベントハンドラに引数を渡したい」という要望自体が成り立たないことにお気付きでしょう。引数を渡したい関数があるなら、イベントハンドラの中で呼び出すのです。 function onload (e) { hoge_2("watasu"); } addeventlistener("load", onload, false); window.onload でも同様ですが、この古いイベントプロパティを使うのは最後の手段にして下さい。 ついでに、click はバブリングしますので、いちいち load を待って個々の要素にハンドラを取り付ける必要などありません。 document.addeventlistener("click", function (e) { var t = e.target; var c; for (c = t; c; c = c.parentnode) { switch (c.id) { case 'button_1' : return hoge_1(); case 'button_2' : return hoge_2("watasu"); } } }, false); これだけで十分です。ie8 以下なら addeventlistener の代わりに attachevent、e.target の代わりに e.srcelement でも使って下さい。 イベント周りは、知らなければどうしようもないことが多いので、試行錯誤する前に仕様・解説書を一通り眺めた方が良いです。