• ベストアンサー

「関数が定義されていない」とのエラーが出る

こんにちは,よろしくお願いします。 何が何だか分からなくて困っています。 IEでは問題なく動くのに,Firefoxだと関数が定義されていないとのエラーが出ます。「<関数名> is not defined 」 スクリプトは,外部ファイル化してあります。キータイプの間違いもありません。何度も確認しました。 function aaa(){  (スクリプト) } を <body onload="aaa()"> のようにして呼び出しています。 いったい,何が悪いのでしょうか? また,Operaだと,「リンク先のスクリプトを読み込むことができません」とのエラーが出ます。 元になるPHPファイルでは, <script type="text/javascript" language="javascript" src="../javascript/AAAAA.js"></script> のようにして呼び出しています。 もちろん,ファイルネームのタイプミスはありません。 ちなみに,スクリプトの内容は,日付関連のコードを記述しています。 試行錯誤している時に,他の日付関連のコードを実行したときに, dayoption is not defined というエラーが出たことがあります。 関数が存在しているのに,定義されていないと出るのは,もしかすると,日付関連の関数等の使い間違いではないかとも考えています。 使っているものは,Date()とgetYear()です。これらのうちのどちらかがFirefoxやOperaだとサポートされていないのでしょうか? どうか御指導ください。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

たぶんなんらかの凡ミスでしょうけど・・・・ firefoxでだめなら、firefoxのアドオンのfirebugで検証するのが一番です

emikouji
質問者

補足

早速のお答えありがとうございました。 早速,firebugをインストールしました。 そうしたところ, <script type="text/javascript" language="javascript" src="../javascript/AAAAA.js"></script> で指定したAAAAA.jsを開くことができていないことが分かりました。 この 「src=」 以下にある相対参照の記述が原因のようです。 IEだとこの記述でうまくリンクして,firefoxやOperaだとリンクできないようです。 もっと,具体的に言うと,../の部分が機能せず,親ディレクトリを呼べないでいる状況のようです。 この記述をどのように訂正,すれば良いのでしょうか?よろしければ御指導ください。

その他の回答 (3)

  • zeeeg
  • ベストアンサー率55% (5/9)
回答No.4

・yyr446 さんの内容についてちょっと補足。 1. >charset="utf-8" 日本語コードの種類がそうとは限りませんし、 これは特に書く必要はありません。 2.>language= これでも動作しますが、language=を使うことは推奨されていません。 出来ればtype=を使いましょう。 ・ところで alert()を使う場合について説明を省略してましたが、 window.alert("Test"); のように、引数などを省略しないで記述しましょう。 (Firefoxでは引数の省略は許されないみたい。)

emikouji
質問者

補足

zeeegさん,ありがとうございます。 いろいろとやってみたら,<script>要素のsrc属性の修正でJavascriptが走るようになりました。 具体的に言うと, src="../javascript/AAAAA.js" とあったのを src="../../javascript/AAAAA.js" としたら,プログラムが正常に走りました。 IEの方も矛盾なく動いています。 こんなことってあるのでしょうか?なぜこんなことが起こるのでしょうか?

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.3

まさか、と思いますが、もしかして Webサーバー側が、.htaccessでブラウザーのユーザーエージェント の値を見て、javascriptディレクトリーへのアクセスをIEのみに制限 している可能性(IEでしか使えないjavascriptのため)はありませんか? <script>の書き方は、普通 <script type="text/javascript" charset="utf-8" src="../javascript/AAAAA.js"></script> か、 <script language="javascript" src="../javascript/AAAAA.js"></script> のどっちかが多いですが、2つ書いても動作するはず。 SRCのパスの書き方は、IEでうまくいっているなら、FireFoxで だめというのはありえないです。

emikouji
質問者

お礼

yyr446さん,ありがとうございます。 >IEでしか使えないjavascript このようなことはないようです。alert()だけの簡単なものは,エラーが出ませんので・・・。 >SRCのパスの書き方は、IEでうまくいっているなら、FireFoxで >だめというのはありえないです。 ですよね,でもこれを試しに直したらうまくいきました。いったいどういうことなのでしょうか?よけいな疑問がまた増えてしまいました。

  • zeeeg
  • ベストアンサー率55% (5/9)
回答No.2

凡ミスでしょうね。 質問で例示している function みたいに全角の空白文字が入っているとか 前後のscript宣言が間違ってるとか...あてずっぽうですが。 >関数が存在しているのに,定義されていないと出るのは, >もしかすると,日付関連の関数等の使い間違いではないかとも考えています。 関数が正しく呼ばれていないのか、関数の中身の問題なのかどうかは、 関数の中身を消してalert()文などと置き換えてみたら一発で分かります。

emikouji
質問者

補足

お答ありがとうございます。 No.1にも書きましたが,Zeeegさんがおっしゃるとおり,script宣言が間違っているようです。 src属性のリンクの入力の仕方,相対参照の正しい記述の仕方,絶対参照の記述の仕方などを,御教授願えればと思います。よろしくお願いします。

関連するQ&A

  • JavaScriptのエラー ( 関数の未定義)

    htmlであるボタンを押すと、そこで実行するはずの関数が未定義になる、 という不具合が出ていたのですが、 JavaScript(<script>)の記述場所を変更する事により、対処することができました。 でもまだ、理解ができずにいます。 たとえば <head> <script ・・・・外部jsファイル> </head> <body> <input type="text" name="hizuke" ・・・> <input type="button" name="newdisp" value="表示" onclick="hyouji();">  ・  ・ <input type="hidden" name="syori" value="">  ・  ・  ・ </body>  ・  ・ ※外部jsファイルでhyouji()関数記述 のようなhtmlで、今回「表示」ボタンをクリックするとエラーになり、 エラーの詳細を見ると    hyouji()が未定義です となり、 JavaScriptの関数がまだ読み込まれていないから 記述を後に移動したほうがいいというアドバイスを受け、 このhtmlを <head> </head> <body> <input type="text" name="HIZUKE" ・・・> <input type="button" name="newdisp" value="表示" onclick="hyouji();">  ・  ・  ・ <input type="hidden" name="syori" value="">  ・ <script ・・・・外部jsファイル> </body>  ・  ・ のように変更して、エラーをなくすことができました。 外部jsファイルのhyouji()関数の処理は 「syori」のhiddenに「hyouji」というような処理識別をセットし、 submitしています。 hyouji()関数の前にもたくさんの関数が定義されていて その中には    var aaa = document.form1.xxxx.value; などの記述もたくさんあります。 <script>の記述場所を移動したことで    htmlを読み込んで、    「表示」ボタンを表示し、    jsファイルを読み込む・・・ という処理順序になると思うのですが 表示ボタンをクリックしたときには、 jsファイルの読込みは終了しているのでしょうか??? ボタンをクリックした時にはjsの読込みを終了していないといけないと 思うのですが、なぜjsの記述を<inputボタン>の記述より後のほうに移動させて、 未定義関数が解決されるのかがわかりません。 エラーの内容が   オブジェクトが見つかりません などだと、hidden項目が後に記述されているからか・・・と理解できるのですが。 うまく伝わるか不安ですが、 ボタンクリックの前にはJavaScriptの関数が読込みが 終了していなければならないのはわかるのですが、 なぜ、ボタンの表示より、後に記述することで解決できるのか 解説していただけると助かります。 よろしくお願いします。

  • javascriptのエラーについて

    お世話になります。 JavaScriptのエラーについて質問があります。 JavaScriptを実行すると、 下記のエラーが表示されてしまい、 NN4.7において実行できません。 check is not defined. JavaScriptの呼び出し処理は下記のとおりとしています。 <a href="#" onClick='check();return false'> <SCRIPT language="Javascript"> <!-- function check() { if( shoricheck() == "err"){ // エラーの場合 return; } document.form.submit(); } --> おそらくメソッドが認識できていないのだと思いますが、 再読み込みを行った場合は、 処理できます。 初期表示時のみです。 タグなどのチェックは行っているため 特に問題ないかと思いますが、 原因はやはりタグの入れ間違いなどでしょうか。 本当に申し訳ございませんが 宜しくお願いいたします。

  • 関数の引数に未定義の変数を渡すとエラーが出る

    自作の関数で、issetとemptyを一緒に判定する関数を作っているのですがエラーが出ます。 ある変数が「未定義」または「null」または「""(空白)」の場合はnullである、という関数を作りたいです。 ------------------------------------------ function is_null_ex($value){  if (!isset($value)) {return true;}               // 未定義かnullの場合、trueを返す  else if (strlen(strval($value)) === 0) {return true;}   // 空白の場合はtrueを返す  else {return false;}                      // $valueに値が入っている場合はfalseを返す } is_null_ex($val); ------------------------------------------ 上記の関数で$valueが未定義の場合にfuncを使うと、次のようなエラーが出ます。 Notice: Undefined variable: val つまり、未定義の変数を引数に渡すとエラーが出ます。 「未定義なら関数に渡さなければ?」と思うかもしれませんが、そもそもこの関数は「未定義」または「null」または「""(空白)」を判定したい関数なのです。 この場合、どうすれば良いのでしょうか? エラーは出ますが上記の関数で「if (!isset($value)) {return true;}」の部分できちんと判定はされています。 PHP5.3系で運用しています。 ぞうぞよろしくお願い致します。

    • ベストアンサー
    • PHP
  • Dreamweaver MX 2004でエラーが出る

    こんにちは。 Dreamweaver MX 2004を使用しているのですが、保存するときに以下の内容のエラーメッセージが出ます。 特に不具合が出るわけでは無いのですが、ファイルを保存するたびに出るので、何とかしたいと思っています。 アドバイスを頂けませんでしょうか? ----- onLoadを_afterSave.htmで実行中に、次のJavaScriptエラーが起こりました。 ""_afterSave""ファイル内: ReferenceError:afterSave is not defined -----

  • エラーが表示されます。

    http://www.patagonia.com/web/jp/home/index.jsp?OPTION=HOME_PAGE&assetid=6297&slc=jp_JP&sct=JP (環境: WinVista/Firefox3.0) 記事内容:[バグ報告]  1.パタゴニアのHPを開いた時のエラーメッセージ      エラーが起きました:       ファイル名: TopNav.js       機能名: InitializeTopNav       メッセージ: TypeError: M_arrTopMenu.each is not a function, undefined       ブラウザを更新することにより解決する場合があります。      エラーが起きました:       ファイル名: index.jsp       機能名: CookieCheck       メッセージ: ReferenceError: Cookie is not defined, undefined       ブラウザを更新することにより解決する場合があります。    2.カラーを指定する時のエラーメッセージ      エラーが起きました:       ファイル名: ProductDetail.js       機能名: PageUpdateCS       メッセージ: ReferenceError: $ is not defined, undefined       ブラウザを更新することにより解決する場合があります。      エラーが起きました:       ファイル名: ProductDetail.js       機能名: ChangeView       メッセージ: ReferenceError: $ is not defined, undefined       ブラウザを更新することにより解決する場合があります。    3.カートに商品を入れようとする時のエラーメッセージ      エラーが起きました:       ファイル名: TopNav.js       機能名: ValidateProductToAdd       メッセージ: ReferenceError: $F is not defined, undefined       ブラウザを更新することにより解決する場合があります。      エラーが起きました:       ファイル名: TopNav.js       機能名: AddItemToCartMulti       メッセージ: ReferenceError: $ is not defined, undefined       ブラウザを更新することにより解決する場合があります。 どうすればいいのでしょうか?

  • jqueryにて

    こちらではお初にお世話になります。 よろしくおねがいします! さて、jqueryを用いてScrollFollowを実装中なのですが、 正常に動作させることが出来ません。 ソースは <script type="text/javascript" src="./jslib/ui.core.js"></script> <script type="text/javascript" src="./jslib/jquery-1.2.6.js"></script> <script type="text/javascript" src="./jslib/jquery.scrollfollow.js"></script> <script type="text/javascript" src="./jslib/jquery.easing.1.3.js"></script> <script type="text/javascript" src="./jslib/jquery.cookie.js"></script> <script type="text/javascript"> $( document ).ready( function (){ $('test').scrollFollow({ }); }); </script> をヘッド部分に、 <div id="test"> コンテンツ </div> をBODYに記述しています。 動作せずにFirefoxのエラーコンソールで確認したところ エラー: jQuery is not defined ソースファイル: (省略)update/jslib/ui.core.js 行: 238 エラー: $("test").scrollFollow is not a function ソースファイル: http://contest2009.thinkquest.jp/tqj2009/110392/update/ 行: 13 と表示されました。jsファイルの生存は確認できており、 その系統のミスではないと思うのですが。。。 どなたかアドバイスをお願いします!

  • 関数の実体定義にヘッダファイルの2重定義防止方法が効かない?

    いつもお世話になっています。 MFCでCプログラミングをしています。 ヘッダファイルの2重定義防止のために、 ヘッダファイル全体を下記のように 囲みました。 <aaa.h> #ifndef AAA #define AAA #define PI 3.141592 void Func(); int wa(int a, int b){ return a+b; } #endif ビルドしたところ、 関数宣言(Func)や#define部分(PI)については、 2重定義が防止されているようなのですが、 関数の実体部分(関数wa)については、 2重定義防止機能が働かず、 ***.obj : error LNK2005: "int __cdecl wa(int a, int b)" は既に ***.obj で定義されています。 というリンクエラーが表示されます。 関数の種類や ヘッダファイル内の宣言の順番を いろいろ変えてみたのですが同じ結果でした。 ここで、このヘッダファイルの先頭に #pragma onceを使用すると このリンクエラーは回避されるのですが、 他コンパイラとの互換性の観点から、 #pragma once以外の方法で実現する必要があるので、 困っています。 URLを検索してみたのですが、 このような特殊な場合について記述されているものは 見つけられませんでした。 どなたか解決法又はヒントをご教示頂ければ ありがたいです。 よろしくお願いします。

  • Dreamweaverでエラーメッセージが表示される

    WinXPでMX2004を利用しています。 ファイルを保存する際に下記のメッセージが表示されます。2回ほどOKを押すと保存されます。対処方法をご教授願います。 <エラーメッセージ> onLoad を tempURL_afterSave.htm で実行中に、次のJavaScriptエラーが起こりました。 ""tempURL_afterSave""ファイル内 : ReferenceError: afterSave is not defined 

  • js 配列

    javascript 配列についてです。 ソースなのですが <script> var user = { email: "taguchi@gmail.com", score: 80, greet: function(name){ console.log("hello," + name + "from" + this.email); } }; user:greet("Tom"); </script> を実行してもコンパイルエラーになり通りません。 エラーコードはUncaught ReferenceError: greet is not definedなので 「greet」が定義されていないよ。という意味だと思うのですが自分の目には定義されているようにしか見えません。 何故エラーになるか理由を教えて頂けると嬉しいです。 ※質問ばかりでスミマセン。答えなくても結構です。ダメ元で質問してみようとは思っています。

  • javascriptエラーについて教えてください。

    メアドを直接ソースに書かないようにするためのjavascriptで 外部ファイルを読み込むように実行してみたのですが、 「実行しましたが、ページでエラーが発生しました。」となり、 ライン:9 文字:1 エラー:‘CSAct’は宣言されていません。 コード:0 という内容のメッセージが出ます。 【HTML】 1:<HTML> 2:<HEAD> 3:<TITLE>情報</TITLE> 4:<meta http-equiv="content-type" content="text/html;charset=shift_jis"> 5:<LINK rel="stylesheet" href="××css" type="text/css"> 6:<script type="text/javascript" src="mail.js"></script> 7: <script type="text/javascript"> 8: <!-- 9: CSAct[/*CMP*/ '1320E1966'] = new Array(CSGoBack1); 10: // --> 11: </script> 12: </HEAD> 13: <body>~ 【メアドの箇所】 E-mail:<script type="text/javascript"><!--// add_AAA(); //--> </script> 【外部ファイル_mail.js】 function add_AAA(){ mail="AAA." + "BBB" + "@CCC.ne.jp"; document.write(mail.link("mailto:" + "AAA." + "BBB" + "@CCC.ne.jp")); } はっきり言ってjavascriptについて全然わかっていない超初心者です。。。 このソースもよさそうなところから引っ張ってきただけなので、 何をどう直していいのか、過去ログを見てもお手上げです。 どなたかエラーの原因がお分かりになりましたらご教授いただけないでしょうか? よろしくお願いします。

専門家に質問してみよう