ほぼ独学でJavaScriptを学んでいるので、一般的なコード(HTML含め)の書き方が分かりません。
JavaScriptでは、ボタンや画像をクリックすると動作する、
というものが多いですが、そうではなくて、
(それはonclick等で関数を呼び出せば良いことは分かります)
時計のように、アクセスした瞬間から実行されるプログラムを複数書きたい時は、
どのようにするのが妥当でしょうか。
<body onload="hoge()">では、関数hoge()しか実行されないことになりますよね。
そうではなくて、hoge()以外にもいくつかの関数を実行したい時はどうするのが一般的ですか?
ここでC言語のように、hoge()をmain関数(int main(void){})のような扱い方にすると、
hoge()関数内で呼び出されている関数も呼び出されることになりますが、そのような書き方で良いですか?
アクセスの効率の良さから考えて、他に良いやり方はあるでしょうか。
・・・前に困ったので<body>タグを2つ付けて2つの関数をonloadアトリビュートで呼び出すという、
奇々怪々なことをやってみて、それでIE7,FireFox3で動いていたので驚いたんですが、
そんなやり方はさすがに御法度ですよね(笑)。
答えにくい質問だと思いますが、アドバイスお願いします。
No.1
- 回答日時:
そのhogeの中で複数の関数を呼び出す、そのやり方で良いですよ。
この回答への補足
<body>タグを二つ付ける、というのはありえないですよねw
例えば、
<body onload="hoge()"><body onload="piyo()">
(中略)
</body></body>
のような。
動くのが不思議です。bodyタグは1つだけ、というのが原則なはずなのに。
No.2
- 回答日時:
//@cc_on
function addEvent(elementId, evt, eventHandler, flag){
var element = ( typeof( elementId ) == 'string' )? document.getElementById( elementId ): elementId;
element./*@if(1)attachEvent('on'+ @else@*/addEventListener(/*@end@*/evt, eventHandler, flag);
}
として
addEvent(window, 'load', hoge1, false);
addEvent(window, 'load', hoge2, false);
addEvent(window, 'load', hoge3, false);
とか
//@cc_on
/*@if(1)attachEvent('on'+ @else@*/addEventListener(/*@end@*/evt, function () {
//ここにhoge1();
//ここにhoge2();
}, false);
/*@if(1)attachEvent('on'+ @else@*/addEventListener(/*@end@*/evt, function () {
//ここにhoge3の中身そのものをここに書く;
}, false);
「window.onloadは、書き換えられるとそれ以前のものが呼ばれない。」と勝手に学んだ。^^;
なので最近は、意地になってwindow.onloadを使わないコードで書いています。
(イベントが追加できないものは、自分の中では勝手に対象外)
とても詳しい解説ありがとうございました。
コードの中にはちょっとまだ分からない面もあるのですが、
window.onloadでも結局は難しい、
他の手といっても結構回りくどいコードになってしまう、
(No.5さんの意見を含め)ということがよく分かりました。
私はwindow.onloadにもっと上手い書き方があるのかと思っていましたが、
ダメなんですね・・・上書きされちゃうんですか。
変数の上書き(型変換含む)と同じですね。
例えば、
time = new Date();
month = time.getMonth + 1; //この時点でmonthは整数
if (month < 10) month = "0" + month; //ここでmonthが文字列になることがある
このあたり、JavaScriptは簡単に統一されていて、
むしろ分かり良いというのはありますが・・・
No.3
- 回答日時:
bodyタグ二つはマズイですね(笑)
今動いていても、ブラウザが変わっても動くという保証はありませんしね。
No.5ベストアンサー
- 回答日時:
""の中がスクリプトなので、<body>タグを2個書かないでも、実行する関数の数が少ないのなら
<body onload="A(); B();"> みたいなのでもOK。
あるいは window.onload を用いれば、<body>タグ内に書かないでもすみます。
(二重定義になると、後方優先になりますが…ANo2参照)
<html>
<head>
<script type="text/javascript">
window.onload = function(){
B();
A();
}
function A(){ alert("A"); }
function B(){ alert("B"); }
</script>
</head>
<body>
<!-- <body onload="A(); B();"> 注)コメント行 -->
</body>
</html>
ありがとうございます。
総合して全てすんなりと理解できました。
これでこれから、
<body onload="hoge();piyo();"を使うか、
window.onload = function(){}でいくか、
<body onload="main()">として他のプログラミングのようにmain関数から他の関数を呼び出しまくるか、
あるいはNo2のような方法もあるからそうしてみるか(←あまり理解できていませんがw)、
という道が分かりました。本当に皆さんお答え下さりありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript ifreamをリロードしたい 1 2022/05/03 16:15
- Windows 10 バッチファイルの記述法とルールについてアドバイスをお願いいたします。 1 2022/04/13 10:50
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- C言語・C++・C# プログラミングのペーパーテスト 実行結果を表示せよ #include <stdio.h> int h 1 2022/07/09 15:27
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- JavaScript カラーミーショップのsectionループ内で、[引数][戻り値]ありの関数的な処理を行いたいです。 1 2022/05/07 19:39
- Excel(エクセル) Indirect関数について、Formulatextで抽出した数式を参照したい。 1 2022/12/15 11:16
- C言語・C++・C# プログラミングのペーパーテスト 実行結果がどのように表示されるか答えよ #include <stdi 1 2022/07/09 14:27
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# C言語 3 2022/10/04 15:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
URLの一部をコピーできるブック...
-
c++プログラム。どこがだめか教...
-
HTTPSのとき":"が"%3A"ではなく...
-
functionから別のfunctionを実...
-
javascriptで自動計算フォーム...
-
日本語入力の禁止
-
関数でy=g(x)のgとは何の略です...
-
google apps scriptの終了のさせ方
-
空の配列に2次元配列の追加
-
第3日曜日のみの日付を取得、...
-
HTML:Tableタグに対し、JavaScr...
-
React hooksが値を返して配列変...
-
javaScript textareaの一行あた...
-
Javascriptで引数の参照渡しか...
-
innerHTML実行後のイベント
-
ActiveXobjectが作成できない
-
リンクボタンからインラインフ...
-
別窓を開いて、ページ下部中央...
-
CDの曲をケータイのSDに移す
-
択一形式のテストをつくりたいです
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Boolean型配列中のTrueの有無を...
-
【正規表現】【javascript】CR...
-
ASP+アクセスでのSQLコメントに...
-
Linux バイナリ実行できない "...
-
Vb.netのグローバル変数の宣言...
-
ボタンをクリックすると数が増...
-
【Jquery】changeイベント毎にa...
-
正規表現で半角数字1桁のみを全...
-
「オブジェクトが必要です。」...
-
HTTPSのとき":"が"%3A"ではなく...
-
onclick指定関数の引数へローカ...
-
同じ型【ハイフンと数字】だけ...
-
Excel VBA の ChangeFileAccess
-
C# .NET DataGridView の行を追...
-
javascriptで文字挿入でtoggle...
-
ifreamをリロードしたい
-
window.onloadでのfunction
-
static constメンバ変数(配列)...
-
MFCのキャプション変更
-
アンカーリンクをクリックさせ...
おすすめ情報