34歳でWebクリエイターを目指す│原因追求(javascript) | 元気ハツラツtamagoです

元気ハツラツtamagoです

PC前を住処にしている主婦でございます。

昨日会社から問い合わせがあったロールオーバーの件で5時間ぐらい悩み続けました。

①いったい何が問題なのか?
②なぜPCで動くのにサーバーにのせると動かないのか?

とにかく、原因究明に乗り出しました。

一番疑われるのはjsファイルです。
今回は手抜きしてjQuery.jsとどっかから持って帰ってきたロールオーバー.jsファイルをのせただけだったので、反省がてら(?)本を開いてコードを打ちました。

できた!
これでも問題ないだろう!
とupさせて確認目

また同じ症状!!
おい~~~~!!!
jsが問題なんじゃないの~~~????

こうなると意地でも解決してやる(この時点で1時間ぐらい経過)むっ

cssか??
cssのリンクを外して動作確認。

また同じ症状。

となるとHTMLか?

本のデータと見比べる。
問題ないじゃ~~ん(この時点で3時間ぐらい経過)はてなマーク

落ち着いて落ち着いて・・・・。

jsのコードはclassをふってあるコードの.gifってなってるのを_on.gifってファイルに変える動作だったよねぇ。
う~~~ん(バカなりに考えてみる)


ビックリマークビックリマークビックリマークビックリマークビックリマークビックリマークビックリマークビックリマークビックリマークビックリマークビックリマークビックリマークビックリマークビックリマークビックリマークビックリマークビックリマークビックリマークビックリマークビックリマーク

「あっ!!」(つい声がでちゃった)

ページ毎にロールオーバーされた状態になってる(わかりづらい)

つまりですねぇ。

沢山ページがありますよね。
リストにしてメニューを並べているのですが、そのページ毎にimg srcが「_on.gif」になってるわけです。
jsちゃんはとにかく( .gif)を( _on.gif)にする動作をしているわけで、そこにはじめから( _on.gif)になってるわけですから?????になっちゃってって事のようです(推測)。

解決方法
①jsちゃんに「はじめから(_on.gif)になってるsrcにはこのfunctionはしなくていいよ」と書く。
②htmlでimg srcが(_on.gif)のclassを消す。

判断
①jsちゃんが使いこなせない現状では、どうしようもない。
②私でもできる事。

結論
②で行く!

さっそくこれでupしてみたら、おkでした。
うれしい(^.^)
今回使ったのは本のコードまるまるです。
コードを載せておきます。
(ほとんどがまだ理解不能です。)

window.onload = function(){
var conf = {
className : 'btn',
postfix : '_on'
};
var imgNodeList = getElementsByClassName(conf.className);
var node;
for (var i=0, len=imgNodeList.length; i<len; i++) {
node = imgNodeList[i];
node.originalSrc = node.src;
node.rolloverSrc = node.originalSrc.replace(/(\.gif|\.jpg|\.png)/, conf.postfix+"$1");
preloadImage(node.rolloverSrc);
node.onmouseover = function(){
this.src = this.rolloverSrc;
};
node.onmouseout = function(){
this.src = this.originalSrc;
};
}
};
//クラス名によるエレメントノード配列取得
function getElementsByClassName(name){
var elements = [];
var allElements = document.getElementsByTagName('*');
for (var i=0, len=allElements.length; i<len; i++) {
if (allElements[i].className == name){
elements.push(allElements[i]);
}
}
return elements;
}
//プリロード
preloadedImages = [];
function preloadImage(url){
var p = preloadedImages;
var l = p.length;
p[l] = new Image();
p[l].src = url;
}