• 締切済み

onLoad関数

どうかお願いします、ご教授ください。 BODYタグの中で onLoad()でまずonLoadを呼び出しています。 <body onLoad = "onLoad()"> まだ、このonLoadについて認識不足のために起こる問題だと思うのですが・・・。 フォームからの入力で未入力があればアラームを警告メッセージを表示するようにしました。 しかし、onLoadの中に警告メッセージを出す関数を入れていると動きません。 onLoadに外に置いたら動きます。 どうしてなのでしょうか??? 多分関数の中にある関数だから呼び出す事ができないという事でしょうか。 もしやと思い onLoad.tamesi(); のようにしても駄目でした。 関数の中にある関数うを呼び出すにはどうしたらよいのでしょうか

  • n187
  • お礼率25% (7/28)

みんなの回答

回答No.6

関数,変数等には有効範囲があります。 で、関数の中で明示的に定義した物は、関数の中だけで有効となります。 まぁ似たような記述の onLoad.neko() で呼び出せそうなのはクラスとしての利用の場合で これはneko()という関数を呼んでいるのではなくて onLoadクラスのnekoメソッドを呼んでいると・・・。 生成したりと少々面倒なので、それなりの目的と知識で利用する物ですが・・・。 すこしそれましたが、 他の関数から呼ばれたくないとか、同一名称でも区別したいなどの理由で意図的に有効範囲を関数内に収める記述が関数の中で関数を定義する物なのですが、 他所から呼べないという事を問題視している時点で 関数の中に関数を定義している意味が不明??? 一応、蛇足の念の為・・・。 関数から、 他の関数の中で記述した関数は呼べませんが、 それ以外の関数は呼べます・・・。 そもそも、onload イベントで何をやりたいのでしょう??? #1の方への補足でも、その辺がないのに onload イベントで呼ばれている onload 関数の中に neko 関数の定義があるのですが、なんか onloadイベント,onload関数が不要なだけの様な気もしないではないのですがぁ~~~。 (すみません。知らない,判らないからこそ質問している質問者側と、知識があるからこそ質問者の目的を読み違えてしまいそうな回答側とのズレが発生しそうな気がしますので、知りたい事と目的を明示して頂いた方が良いかも・・・。目的に対して行おうとしている手段自体が既に誤っているかも・・・。)

  • perse
  • ベストアンサー率74% (113/152)
回答No.5

function onLoad(){ function neko(){ alert("neko"); } } という書き方でneko()を呼び出すのは不可能ですが、 function onLoad(){ neko(); } function neko(){ alert("neko"); } と2つに分ければneko()を呼び出すことが出来きます。 動作も同じです。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

>(3)の処理はonLoadの中にあるので無理なのでしょうか 関数の内部にある関数は、その関数からは呼び出せますが、 外部からは直接は呼び出せません。 なぜこのようなことがしたいのでしょうか?

回答No.3

とりあえず全てを疑わせて頂きます。 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)
回答No.2
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

どんな風に書いているのか、補足してくれませんか

n187
質問者

補足

<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の中にあるので無理なのでしょうか

関連するQ&A

  • window.onLoad について

    <body> タグに、onload=関数名・・・ と記述するとなぜかオブジェクトがありませんとかで 実行されない時があるため、 <head>タグ内に <script type="text/javascript">  window.onLoad=function(){ 関数名} </script> と記述してみたところ、まったく関数が動作しなくなってしまいました。 ステータスには「ページが表示されました」とでていて、スクリプトエラーにもなっていないようです。 原因がわからず、それならば・・・ htmlを順番に表示していくのだから、htmlの最後のほうに記述すればいいのでは? と思い、 </body>の直前に <script type="text/javascript"> 関数名  ← onloadで動作させる関数 </script> と記述してみたところ、うまく表示できました。 この記述方法って正しいのでしょうか? 環境に依存するのか、毎回悩まされるし、毎回対処方法が違ったりしているので ホントに困っています。 アドバイスお願いします。 #何故 window.onLoad=function(){ 関数名 } ではまったく動かなかったのでしょう。。。

  • 関数を呼び出すHTMLタグ<body onload="hoge()">について

    ほぼ独学でJavaScriptを学んでいるので、一般的なコード(HTML含め)の書き方が分かりません。 JavaScriptでは、ボタンや画像をクリックすると動作する、 というものが多いですが、そうではなくて、 (それはonclick等で関数を呼び出せば良いことは分かります) 時計のように、アクセスした瞬間から実行されるプログラムを複数書きたい時は、 どのようにするのが妥当でしょうか。 <body onload="hoge()">では、関数hoge()しか実行されないことになりますよね。 そうではなくて、hoge()以外にもいくつかの関数を実行したい時はどうするのが一般的ですか? ここでC言語のように、hoge()をmain関数(int main(void){})のような扱い方にすると、 hoge()関数内で呼び出されている関数も呼び出されることになりますが、そのような書き方で良いですか? アクセスの効率の良さから考えて、他に良いやり方はあるでしょうか。 ・・・前に困ったので<body>タグを2つ付けて2つの関数をonloadアトリビュートで呼び出すという、 奇々怪々なことをやってみて、それでIE7,FireFox3で動いていたので驚いたんですが、 そんなやり方はさすがに御法度ですよね(笑)。 答えにくい質問だと思いますが、アドバイスお願いします。

  • 外部ファイルでBODYのonloadイベントの関数を指定するには?

    (1)<BODY onload="funcA()">という形でなく、 ヘッダー内に入れた外部ファイルに (2)document.body.onload=funcA; としたいのですが、 「document.bodyはオブジェクトではありません」 というエラーになってしまいます。 <script language="javascript" src="xx.js">は <head></head>の中に入れています。 どうしたら(2)の方法で、 外部ファイルでbodyのonloadイベントの関数を指定できるでしょうか?

  • Javascript onloadイベントについて

    AppleScriptの中にJavaScriptを書き、 location.hrefでページ移動し、onloadでページ読み込み後、指定タグを変数にいれて、 フォーム入力などの操作を行いたいのですが、 ページ移動後、フォーム入力をすることなく、そのまま処理を終了してしまいます。 いろいろと試行錯誤してみましたが、どうも解決しないのでご教授いただきたいです。 よろしくお願いいたします。 tell application "Google Chrome" tell window 1 open location "http://www.google.co.jp/" repeat while loading of active tab delay 0.1 end repeat tell active tab execute javascript " function idou(url) { location.href = url } function nyuryoku(){ var inp = document.getElementsByTagName('input') inp[0].value = 123 } idou('http://www.goo.ne.jp/') window.onload = nyuryoku() " end tell end tell end tell

  • onLoad時に複数の処理を実行する方法

    <BODY>タグに「onLoad="……"」と記述することで、 ページがロードされた時にある処理をすることができますが、 ロード時に複数の処理を実行したい時はどのように記述すればよいのでしょうか? 具体的に言うと、独自に作成した複数の関数をページをロードした時に使用したいのです。 どなたかご助言お願いします。

  • JavaScriptのonLoadイベントが、発生したり発生しなかったりする。

    ■環境  ・Mac OS X(バージョン10.3.4)  ・Internet Explorer for Mac(バージョン5.2.3) ■詳細  ・HTMLが読み込まれたときにJavaScriptのhogehoge関数を実行させたいため   HTMLの<BODY>タグを下記のように記述している。    <BODY "onLoad=hogehoge()">  ・当該HTMLを読み込んだとき、あるときはhogehoge関数が実行されるが   あるときは実行されない。   →onLoadイベントが発生していないよう。  ・上記現象に再現性なし。  ・他ブラウザでは、当該HTMLのonLoadイベントは必ず発生する。   確認したブラウザは下記の組み合わせ。    ・Mac OS 9(9.2.4) + Internet Explorer 5(5.1.7)    ・Mac OS 9(9.2.4) + Netscape 4.7    ・WindowsXP + IE6.0(SP2)    ・WindowsXP + Netscape 4.77 ■質問  ・上記現象は、Internet Explorer for Mac(バージョン5.2.3)の   既知の障害でしょうか。  ・回避方法(onLoadイベントを必ず発生させる方法)はありますでしょうか。

  • BODYタグのonloadについて

    こんにちは。 HTMLのBodyタグにて、onload処理を記述しているのですが、 不思議な現象が起きます。。。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Style-Type" content="text/css"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <title></title> <script language="JavaScript" type="text/JavaScript"> <!-- // 初期表示 function init() { alert("AAA"); var formObj = document.getElementById("starter"); alert("formObj.action = " + formObj.action); formObj.submit(); } //--> </script> </head> <body onload="init()" tabindex="-1"> Now Loading... <form method="post" name="starter" action="/getIchiran.do" > <% System.out.println("このJSPにきてますか?"); %> </form> </body> </html> 上記のように記述しているのですが、 onloadのinit関数が、呼ばれる場合と呼ばれない場合があります・・・ 呼ばれる場合と、呼ばれない場合でも 「このJSPにきてますか?」のログは表示されているので、このHTML(JSP)は呼ばれている模様です。 どうしてこうのような現象が起きるのかさっぱり分からなくて・・・ 何が悪いのか教えて頂けないでしょうか? 宜しくお願い致します。 IEは6.0、 OSはWindowsXPです。

    • ベストアンサー
    • HTML
  • ページが完全に読み込まれてから関数を動かす

    <body onMousemove="xxx()"> のようにすると、ページが完全に読み込まれる前に関数が実行されて、 エラーになってしまいます。 関数の中には event.clientX でマウスの位置を取得しているので onMousemoveははずせない??と思います (初心者で、正しく使えてるかわからないのです...) また、エラーが出る原因は、関数の中で指定してるフォームが まだ読み込まれてないこと です ですので、ページが完全に読み込まれれば、エラーはなくなります。 こんな状態です ・event.clientXは、onMousemove や onLoad などがおきたときのマウスのX座標を取得するものですが、マウスの座標を取得する方法はほかにありますか? ・エラーが出ないようにするには何か方法はありますか? エラーが出るのはページが読み込まれるまでの間なので、エラー表示しないような処理をすることになるんですか?

  • フォームへフォーカスをあてるスクリプト

    フォームへフォーカスをあてるスクリプトなのですが、 <BODY ONLOAD="Kaisetsu()"> のようにしています。 オンロードは他の関数で使うので、外したいのですが、下の方で 関数を呼び出してもカーソルがフォーカスしてくれません。 どうすればできるでしょうか。

  • リンクへのフォーカスの移動の仕方

    表の中にテキストを記入しそこにリンクが張ってあります。 例)TEST.html  A1(A1.htmへのリンク)  A2(A2.htmへのリンク)  A3(A3.htmへのリンク) このとき、TEST.htmlを開いたときに、A2と言う文字にフォーカスをあてることはできないのでしょうか? おそらく<body>タグの中に onload 関数 と書いて その関数で、A2にフォーカスをあてるのだと思うのですが、うまくいきません。 関数の中には document.all["A2を示すAタグのID"].Focus();と書いています。 Javascriptについてあまり知識がなく、説明も不十分かと思いますが、宜しくお願い致します。

専門家に質問してみよう