人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: AKI-NAMI
●カテゴリ:ウェブ制作
✍キーワード:HTML JavaScript js エラー オブジェクト
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● tokuya_n
●10ポイント

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

function a(id){

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

}


とか


function a(id){

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

}

とかです。

◎質問者からの返答

上記でもだめでした。

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

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

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

となってしまいます。

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

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


2 ● Mars
●60ポイント

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){}
}
◎質問者からの返答

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ