jQueryが動かないときは、こうすると解決するかも。

今日もやってしまいました。

私は、何度も何度も同じ間違いを繰り返し、
「あーそうだったよ、そうだった。前にも同じことで、つまづいたんだった」
ということがよくあります。



もー絶対に、同じ過ちを繰り返さないぞ!


という強い意志を持って、今回の記事をお送りします。




スクロールが長いページのときに、
グローバルメニューを上部に固定しておきたいときってありますよね。
最初から一番上に配置しておくだけなら、position:fixed;で構わないんですが
ヘッダー上部にはロゴがあって、その下にグローバルメニューって場合が普通だと思います。

その場合には、ちょっと工夫が必要で今回jQueryを使ったんですが、 どうにもこうにも動かない。

あれやこれやとソースとにらめっこすること小1時間・・・

lightboxのjsを全部外すと、動きました。 どうやら、prototype.jsとぶつかっている事が判明。

prototype.jsとjQueryは衝突しやすい

そうなんです!
このことを忘れてましたーーー!
前にも同じことで半日悩んだことがあったのに!バカバカバカ。

作業していたのは、ある会社の制作実績が大量に掲載されているページでして、 それぞれの実績の中身をモーダルウインドウ(背景がグレーになってパッと浮き出てくるアレね)で見せていたのです。

なぜprototypeとjQueryが衝突するのか?っていうのは、
簡単に言うと[$]関数をprototypeとjQueryの両方で使ってしまっているから、
どっちの命令なのかわけわからなくなり、結果動作しなくなっちゃうらしいです。

回避方法

(1) まず、読み込む順番が重要です。

head内で読み込むときは、prototypeが先、jQueryは後に書きましょう。



(2) そしてjQueryに書いてある「$」を、ぜんぶ「jQuery」に書き換えます。

$(function(){
});
↓ ↓ ↓
jQuery(function(){
});

こーいうことね。
ファイル内に$は、いっぱいあると思いますが、エディタの一括置換を使いましょう!!

まだ動かないですか?そんな場合は、

(2) noConflictを使います。


これでモーダルウインドウも、固定メニューも、両方とも無事実装できたと思います。

めでたしめでたし。

ーーーーーーーーーーーーーーーーーーーーー

しかし本当にもの覚えが悪いよ、自分・・・。
せっかくzen-cording入れたのにショートカットをなかなか覚えられないし、
作業効率もなんか落ちてるし、やっぱ年のせいかしら。

おすすめの記事

jQuery についてのエントリー prototype.js についてのエントリー

コメントをどうぞ

Facebookページでは更新情報や厳選ニュースを配信中



profile-image
Job:Web Designer
Location:Tokyo/Shinjuku
Machine:Mac book Pro

東京在住のWebデザイナーです。最近はWordPressで構築する案件が多いです。PHP/JavaScript/レスポンシブWebデザインなど勉強したことの忘備録として書き留めています。

チームStudioBrainのメンバーとしても活動中。 Twitter Button from twitbuttons.com pixeldesign_logo