- 締切済み
onLoad関数
どうかお願いします、ご教授ください。 BODYタグの中で onLoad()でまずonLoadを呼び出しています。 <body onLoad = "onLoad()"> まだ、このonLoadについて認識不足のために起こる問題だと思うのですが・・・。 フォームからの入力で未入力があればアラームを警告メッセージを表示するようにしました。 しかし、onLoadの中に警告メッセージを出す関数を入れていると動きません。 onLoadに外に置いたら動きます。 どうしてなのでしょうか??? 多分関数の中にある関数だから呼び出す事ができないという事でしょうか。 もしやと思い onLoad.tamesi(); のようにしても駄目でした。 関数の中にある関数うを呼び出すにはどうしたらよいのでしょうか
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- koutarou504
- ベストアンサー率44% (182/407)
関数,変数等には有効範囲があります。 で、関数の中で明示的に定義した物は、関数の中だけで有効となります。 まぁ似たような記述の onLoad.neko() で呼び出せそうなのはクラスとしての利用の場合で これはneko()という関数を呼んでいるのではなくて onLoadクラスのnekoメソッドを呼んでいると・・・。 生成したりと少々面倒なので、それなりの目的と知識で利用する物ですが・・・。 すこしそれましたが、 他の関数から呼ばれたくないとか、同一名称でも区別したいなどの理由で意図的に有効範囲を関数内に収める記述が関数の中で関数を定義する物なのですが、 他所から呼べないという事を問題視している時点で 関数の中に関数を定義している意味が不明??? 一応、蛇足の念の為・・・。 関数から、 他の関数の中で記述した関数は呼べませんが、 それ以外の関数は呼べます・・・。 そもそも、onload イベントで何をやりたいのでしょう??? #1の方への補足でも、その辺がないのに onload イベントで呼ばれている onload 関数の中に neko 関数の定義があるのですが、なんか onloadイベント,onload関数が不要なだけの様な気もしないではないのですがぁ~~~。 (すみません。知らない,判らないからこそ質問している質問者側と、知識があるからこそ質問者の目的を読み違えてしまいそうな回答側とのズレが発生しそうな気がしますので、知りたい事と目的を明示して頂いた方が良いかも・・・。目的に対して行おうとしている手段自体が既に誤っているかも・・・。)
- perse
- ベストアンサー率74% (113/152)
function onLoad(){ function neko(){ alert("neko"); } } という書き方でneko()を呼び出すのは不可能ですが、 function onLoad(){ neko(); } function neko(){ alert("neko"); } と2つに分ければneko()を呼び出すことが出来きます。 動作も同じです。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>(3)の処理はonLoadの中にあるので無理なのでしょうか 関数の内部にある関数は、その関数からは呼び出せますが、 外部からは直接は呼び出せません。 なぜこのようなことがしたいのでしょうか?
- koutarou504
- ベストアンサー率44% (182/407)
とりあえず全てを疑わせて頂きます。 a.「onLoad関数」ってどれ? >BODYタグの中で onLoad()でまずonLoadを呼び出しています。 ><body onLoad = "onLoad()"> >しかし、onLoadの中に警告メッセージを出す関数を入れていると動きません。 まさか <body onLoad = こちらを関数と呼んではいませんよねぇ・・・。 こちらはイベントハンドラといって、あるタイミングで処理を呼び出すだけです。まぁそのタイミングで呼び出した処理が適切に動けるタイミングなのかはイベントハンドラからは知った事ではないというか関われないというか・・・。 b.「onLoadを呼び出しています。」という呼び出すとは? 念の為に聞きたいのですが、呼び出すとは処理をさせるという事ですよねぇ・・・。まさか読み込むとかいう事ではないですよねぇ・・・。 疑問に思う理由は、 >フォームからの入力で未入力があれば >アラームを警告メッセージを表示するようにしました。 という処理ならば、呼び出す(処理を望む)きっかけは別にある様な気が・・・。 ><body onLoad = "onLoad()"> この記述を受けて、 <script type="text/javascript"><!-- alert(900); if(window.self.onLoad) alert(901); // --> </script> この記述を追加して 900 が表示され 901 が表示されなければ、そもそも関数が有効範囲に存在しないという事が確認できます。 <body onLoad = "alert(888)"> この様にして 888 が表示されることでイベントハンドラは適切に動作している事が確認できます。 これ以上は、やはり動く,動かないの再現が出来る記述を提示して頂かないと・・・。 それこそ1文字書き間違いの可能性だってある訳ですから・・・ (正直、言葉の勘違いの様な気がしていますが・・・。つまり関数が関数として成り立っていない様な・・・。)
- m035
- ベストアンサー率44% (38/86)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
どんな風に書いているのか、補足してくれませんか
補足
<html> <script language="JavaScript"><!-- <head> <title>Sample</title> function onLoad(){ function neko(){ alert("neko"); } } function neko2(){ alert("neko"); neko(); } </script> </head> <body onload = "onLoad()"> </body> ボタンを押してneko2呼び出し </html> 即興で書いてますので文法間違っているかもしれません。 つまり、やりたかった事はまず (1)ボタンを押す (2)neko2関数が呼び出され nekoと表示 (3)neko関数が呼び出され nekoと表示 です。 この(3)の処理はonLoadの中にあるので無理なのでしょうか