仮想と現実の真ん中あたり

主に舞台探訪とか聖地巡礼と呼ばれる記録をつづるブログ

サイトのJavaScriptをちょっとだけ改良

時間が出来たので、サイト内の探訪記のJavaScriptをちょこっと改良してみました。


例えば、↓のページですが、
  「咲-Saki-」舞台探訪-長野県内編 その1-
このページのJavaScriptで、今までこんな記述を使っていました。


if ((num == 0) || (num == 27) || (num == 28) || (num == 31) || (num == 32) || ((num > 34) && (num < 37))) {
  var marker_field = document.getElementById('mark'+ num);
  var fzoom = function() {
    map.panTo(latlng);
    f();
    map.setZoom(16);
  }
  marker_field.onmousedown = fzoom;
}


さて、ここで冒頭の謎のif文ですが、その理由はページ内の『[地図で見てみる]』の箇所にあります。
スクリプトの最後の、
  marker_field.onmousedown = fzoom;
は、地図内の各マーカに対して、『[地図で見てみる]』の箇所(ID)をクリックされた時の動作を設定しています。
一方、このページには、「咲-Saki-」の南信地方の清澄物件の記事だけが載っています。つまり、このページには南信地方(清澄)の分しか『[地図で見てみる]』のIDがありません。
そのため、『[地図で見てみる]』のIDを取得するメソッド、
  var marker_field = document.getElementById('mark'+ num);
を全てのIDに対して実行した場合、このページに載っていない北信の鶴賀物件や南信の風越物件のIDが正常に取得出来ません
そして、この正常に取得できなかったIDをマーカに設定すると、次のエラーが出てしまいます。





document.getElementById()メソッドが取得出来なかったIDは、オブジェクトがnull値となってしまい、マーカの生成時にエラーが起きてしまったわけですね。


それを回避するために使っているのが、前記のスクリプトの冒頭の謎のif文で、このページに存在するIDだけ選んでマーカに設定しているわけです。
何とも不恰好ですね(笑) そして、各ページ毎に置かれたIDが違いますから、各ページ毎にスクリプトを別に用意する必要がある、というのも難点です。


これが今までの記述方法でした。
これを解消しようとして出た発想が「エラーが起きた事(オブジェクト==null)が分かるなら、それを組み込まなければいいじゃない?」、というもので、それを実装したのが次の記述です。


var marker_field = document.getElementById('mark'+ num);
if (marker_field != null) {
  var fzoom = function() {
    map.panTo(latlng);
    f();
    map.setZoom(16);
  }
  marker_field.onmousedown = fzoom;
}


これでスマートに記述出来るようになり、しかも各ページで共通のJavaScriptファイルで済むようになりました。
思いついてみると、ごく普通の発想で、むしろなぜ今まで面倒な事をしていたのかと反省しきりです。


以上、誰得?、の記事ですが、探訪記内のJavaScriptのお話でした。