よく分からないけど、JavaScriptがIE7でうまく動かない場合

他のブラウザ(IE8以降、FireFox、Chrome、Opera等)でOKなのに、IE7でJavaScriptが期待通りの動作をしない場合のチェック点。

連想配列で、各要素の区切りに入れるカンマを、最後にも入れてしまう。

これ、よくやっちゃうんだよな。。。

■■■■例
(OKな書き方)
var test_array = new Array();
test_array = {
  val1 : 1,
  val2 : 2,
  val3 : 3
}

(NGな書き方)
var test_array = new Array();
test_array = {
  val1 : 1,
  val2 : 2,
  val3 : 3,
}


どこが違うって、「val3 : 3」の後のカンマの有無です。
これ、書式的には最後には入れないのが正しいと思うのですが、なぜか大方のブラウザではNG例でも問題なく動作してしまう。
ところがIE7ではこれが厳密なんですね。
(たしかIE6も。最近IE6は動作対象にしてないので忘れた)

IE7はNG例だと、「val3 : 3,」のところでエラーが発生し、以降のスクリプトがキャンセルされます。
これは、IE10でも、歯車をクリックして開発ツールを使い、動作モードをIE7にすれば確認できます。
またスクリプトのデバッグモードを使えば、この箇所でエラーが出ているとはっきり分かります。

でもねー、なかなかここに気づかないんですよ。(いや、気づけよ。。。)

以降のスクリプトが全て無視されるというのがミソで、例えばタグをクリックした時の動作のなかでこのエラーがあったとする。
その後ろにはのhrefを無視するために「return false;」を書いていたとする。
NG例だと「return false」が実行されないため、hrefで指定されたページへ移動するような動きをしてしまうわけです。
この時点で、IE7での「return false」の使用に問題があるのではないかと、見当違いなところを疑ってしまったりしてね。
(実際、IE7でreturn falseが効かないという現象もあるようですが)

まぁ、まずはきちっと書く、綴りミスや書式のミスをしないって、結局基本的なところが大切なわけですね。。。

コメント

このブログの人気の投稿

FacebookアプリのSMSアップデートの通知をオフにする

【解決!】InDesignのエラー「ファイルが存在しないか、ファイルへのアクセス権がないか、またはファイルが別のアプリケーションで使用されている可能性があります。」

Adobe Photoshop CS6の自動保存機能のファイル保存場所

子どもがマイクラPEで、友だちとオンラインマルチプレイをやりたいと言い出したときの話。

Healbe Gobeが来た! ファースト レビュー。