htmlとjavascriptを分離して管理したいと考え、外部.jsファイルにwindow.onload=function(){関数}の様に記述していますが、window.onload=function(){以下に関数を複数記述することになると思います。ですが、表示されるページ以外の関数も記述する必要がある為、表示ページで使用する以外の関数の部分でエラー(オブジェクトがない、等)が発生します。

.js1ファイルで上記エラーをなくすことができる記述方法か、又はページ毎に.jsファイルを作成しなければいけないのかご教授願います。

回答の条件
  • 1人2回まで
  • 登録:2008/04/08 17:44:39
  • 終了:2008/04/10 22:09:38

回答(2件)

id:tokuya_n No.1

tokuya_n回答回数56ベストアンサー獲得回数72008/04/08 17:56:21

ポイント10pt

直接オブジェクトを指定するのではなくて,IDやNAMEを関数の引数にもてばよいと思います。

function a(id){

document.getElementById(id).value = 'XXX'

}


とか


function a(id){

document.getElementsByName(name).item(0).value = 'XXX'

}

とかです。

id:AKI-NAMI

上記でもだめでした。

関数Aはページ1で使用、関数Bはページ2で使用として。

例えばページ2が読み込まれた段階で、関数Aで使用しているオブジェクトが見つからない、

ページ1が読み込まれた段階で関数Bで使用しているオブジェクトが見つからない、

となってしまいます。

読み込むページ内で使用のnameとか、IDを配列かなにかで取得して、

for文などで、取り出しつつ関数で使うnameと一致したら実行、みたいなそんなことでもいいのですが。

2008/04/09 09:51:10
id:Mars No.2

Mars回答回数203ベストアンサー獲得回数202008/04/09 09:59:40

ポイント60pt

window.onload=function(){

func1();

func2();

func3();

}

と、なっているとして、各関数を処理をするかどうかを判断してみては?

// 例1-URLで判断
// abc.htmlの時だけfunc1を実行
if(loaction.href.match(/abc\.html$/)) func1();

// 例2-bodyのidで判断
// <body id="abc">のhtmlの時だけfunc2を実行
if(document.body.id == 'abc') func2();

// 例3-要素があるかどうかで判断
// <??? id="abc">の要素が存在するときだけfunc3を実行
if(document.getElementById('abc')) func3();

あるいはエラーをとにかく無視させてしまう。(ある関数の中でエラーが発生しても他の関数を実行するようにする)

window.onload=function(){
try {func1();}catch(e){}
try {func2();}catch(e){}
try {func3();}catch(e){}
}
id:AKI-NAMI

ありがとうございます。難しく考えていました。

上記のbodyIDで動作を確認、他ページでエラーも出ませんでした。

そういえばそうか、と自分の頭の固さを感じてしまいました。

とりあえず解決はしましたが、他のアプローチで案があれば以下にお願いします。

2008/04/09 11:32:27

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません