スポンサーサイト

一定期間更新がないため広告を表示しています

  • 2013.01.21 Monday
  • -
  • -
  • -
  • -
  • by スポンサードリンク

考えがたい現象は凡ミスが原因

二日間ずっと詰まっていました。
言葉にすると説明しにくいんですが、ざっとこんな感じ。

Firefox で発生。プラットフォームにはかかわらず Windows でも Mac でも発生する。IE6(win), IE8(win), Saffari(mac)では発生しない。

ある画面(A)で汎用的なJavaScriptが動いています。そのスクリプトを画面(B)で利用すると動きません。画面(A)で利用されているスクリプトを改修して、画面(B)用に新しいスクリプトを作りました。画面(B)用に作成したものですが動きません。その画面(B)で動かなかった新スクリプトを画面(A)に持っていくと・・・動く・・・。

要約すると、画面Aで動くスクリプトが画面Bでは動かない。画面Bで動かなかったものが画面Aに持って行くと動く。

A → うごく → Bに移植 → うごかない → そのままAに移植 → うごく

こういう意味不明な現象はたいていは凡ミスで、「タグ・クォートの閉じ忘れやスペルミスによりスクリプトで利用されているオブジェクトが存在しなかった」とか、「コピペ作成のため同名オブジェクトが複数存在した」とかそんなのが原因です。そのあたりを慎重にチェックしながら原因の特定をさぐりますが・・・

A と B の差を調べても見つからない

わからない(∩´∀`)∩

なぜ?

A と B で動かしたときには実は差がある。B で動かしたときだけ「グローバルスコープで ID または name 属性値により要素を参照しています。代わりに W3C 標準の document.getElementById() を使用してください。」という警告が吐き出されている。そうです。当然、こいつが怪しいのです。上記の「グローバルスコープ・・・」てエラーは以下の部分で発生していた。

var xxxxx = text_xxxxx.value;


このスクリプトの悪い部分はすぐわかる。document.フォーム.text_xxxxx と順次参照していないからである。実際、訂正したら動かなかった画面 B でも動くようになる。

var xxxxx = document.form_xxxx.text_xxxxx.value;
var xxxxx = $("input[name='text_xxxxx']").val();


どっちでもいいです。でもさ・・・A だと修正するまでもないんだよ・・・。動作的には問題ないじゃない・・・。

そういうわけでほとんど丸々二日分ほど悩んだ結果、原因が判明しました。

使用する jQuery のバージョンが違っていた。

画面A → jQuery 1.7.1
他画面 → jQuery 1.4.2

おかしいだろおおおおおおおおおおおおおおおおおおおおお、なんで統一しないんだよ!

まぁ、気付いたらいい。こういう理解不能な挙動はやはり凡ミスである例に漏れていない。しかしね、一番気持ち悪いのは・・・jQuery。jQuery のバージョン差にまで頭が回らなかったのは以下の理由による。

問題のスクリプト中で jQuery を利用していない。少なくとも使っているつもりはない。

上のスクリプトがそうですけど、jQuery 使ってないですよね。

jQuery.xxxx();
$('#xxxxx').value;


こんなんですよね。JQuery を使うときって。

じゃあ、使ってないはずですよね?じゃあ・・・なんで jQuery のバージョン差で問題が発生するの・・・。

理屈としては、使っているつもりはないけど、使用されている。言い方を変えれば、そういうソースでも jQuery でオブジェクトにアクセスするように jQuery 自身が余計なイベントを組んでしまっている。だと思うのです。

やっぱりね、人が作ったものを使うのは好かん。なにされてるかわからんもん。

JQuery とか必要ないでしょう・・・。便利なのはわかる。でも、ちょっとソースが短くなるだけやん・・・。最近の JavaScript てあんまりにも jQuery に依存しすぎていて jQuery の記述方法が言語仕様に近くなってる。よくないとおもうんだ。

おかしい・・・タイトルと趣旨が変わっているw
なぜ、反 jQuery 記事になってしまっているのだw

スポンサーサイト

  • 2013.01.21 Monday
  • -
  • 16:54
  • -
  • -
  • -
  • by スポンサードリンク

コメント
コメントする








   
この記事のトラックバックURL
トラックバック

calendar

S M T W T F S
    123
45678910
11121314151617
18192021222324
252627282930 
<< June 2017 >>

最近の記事

記事(カテゴリ別)

リンク

recent comment

recent trackback

  • 続 クロスドメインで使う XMLHttpRequest と CORS の話
    RougeBleu (07/31)

ブログ内検索

others