こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

IE8でのjavascriptエラーについて

こんにちは。

IE8で表示されてしまうjavascriptエラーで困っています。
以前、別の方が同じような質問をされていたのですが、
理解できず新たに質問させて頂きました。
私はjavascriptに関して全くの素人です。
技術者の方、大変お手数ですが素人にも分かるような回答を頂けると
とても助かります。

ロールーオーバに使用目的で以下のスクリプトをリンクしております。

// JavaScript Document

function smartRollover() {
if(document.getElementsByTagName) {
var images = document.getElementsByTagName("img");

for(var i=0; i < images.length; i++) {
if(images[i].getAttribute("src").match("_off."))
{
images[i].onmouseover = function() {
this.setAttribute("src", this.getAttribute("src").replace("_off.", "_on."));
}
images[i].onmouseout = function() {
this.setAttribute("src", this.getAttribute("src").replace("_on.", "_off."));
}
}
}
}
}

if(window.addEventListener) {
window.addEventListener("load", smartRollover, false);
}
else if(window.attachEvent) {
window.attachEvent("onload", smartRollover);
}

画像を2枚用意し、ロールオーバ時に●●●_on.jpg、そうでないときに
●●●_off.jpgと分けております。
マックサファリ、ファイアーフォックス、ウィンドウズIE6,7は
問題なく表示されます。
ところがウィンドウズIE8でのみ、このようなエラーが出てしまいます。
`get Attribute()` is null or not an object

どうやらこの箇所が怪しいようです。
↓ ↓ ↓ ↓

if(images[i].getAttribute("src").match("_off."))

ご回答を頂けるととても助かります。
どうぞよろしくお願い致します。

投稿日時 - 2009-07-13 18:41:57

QNo.5122579

すぐに回答ほしいです

質問者が選んだベストアンサー

=>みなさんはどのように勉強されたのですか?
私の場合、本を読んで勉強しているわけではないですね。実践あるのみです。わからない事があったらまずWebで検索します。リファレンスやサンプルがいくつか解説されているページをブックマークに登録しておいてさっと調べる。だめならgoogleで検索する。それでもだめならここに質問を投稿するってパターンです。
=>初心者の頃に読んだおすすめの本
javascript関係で最初に買った本は、秀和システムの「詳解HTML & Javascript 辞典」(2000年初版)というリファレンス本です。それ以降プログラム関係の本は買って無いです。でも最近、技術評論者の「PHPハンドブック」てのを買ってしまった。まあ図書館で無償でいろいろ本を借りることはありますが、買いません。お金がもったいないです。現代はネットで全部調べられます。
ちなみに、初心者のころ、最初に読んだプログラム関係の本は
培風館「FORTRAN入門」(1981年改定3版)でした。古うー。

投稿日時 - 2009-07-15 12:21:36

お礼

yyr446さま

こんばんは。
お返事どうもありがとうございました。
やはり実践あるのみですね。
実際IE8でエラーが出て、いろいろ検索したり、
ここで質問したりして分かる事もありました。

まだまだひよっこですが、少しずつ勉強していきたいと
思います。
yyr446さんは1981年から携わってらっしゃるのですね。
大ベテランですね!
私もそうなりたいです。

何度も回答頂き、どうもありがとうございました。
また困った事があったら相談させてください。
宜しくお願いします。

投稿日時 - 2009-07-16 23:06:03

ANo.3

このQ&Aは役に立ちましたか?

8人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

裏を取っている訳ではありませんが、
IE8からgetAttributeで取得する属性が無かった場合、nullが返ってくるようになったようです。
IE7までは""空文字が返ってきていました。

きっとHTMLの中にsrc属性が付いてないものがあるのでは無いでしょうか。

if(images[i].getAttribute("src").match("_off."))
     ↓
if(images[i].getAttribute("src") != null || images[i].getAttribute("src").match("_off."))

このように変更してみては如何でしょうか。

投稿日時 - 2009-07-13 20:49:09

補足

take_julyさん、yyr446さん

たびたびすみません。

私はjavascriptの勉強を初めてまだ10日くらいの
初心者なのですが、
みなさんはどのように勉強されたのですか?

今ドリルのような本で少しずつ練習しているのですが、
トラブルが起こった時対処できずに困ってしまいます。
初心者の頃に読んだおすすめの本などございましたら
教えて頂けないでしょうか?

宜しくお願い致します。

投稿日時 - 2009-07-15 11:24:20

お礼

ake_julyさん、おはようございます。

>getAttributeで取得する属性が無かった場合、nullが返ってくるようになったようです。

そうなのですね。他のページを見ても、同じようなエラーが
出ているページがありました。
IE8とは優れたブラウザだと聞いていたのですが
今までの方法にエラーが出てしまっては困りますね。。。
やはり知識を持っていないと。
勉強になりました。
どうもありがとうございました。
また何か問題があったらどうぞよろしくお願い致します。

お礼が遅くなり、大変失礼致しました。

投稿日時 - 2009-07-15 11:23:45

ANo.1

IE8もって無いので試せませんが、
IE8だとgetAttribute("src")でフルパス名が変えるようになったそうです。
if(images[i].getAttribute("src").match("_off."))
↓ ↓ ↓ ↓
if(images[i].src.match("_off."))

投稿日時 - 2009-07-13 19:39:23

お礼

yyr446さん、おはようございます。
教えて頂いた方法でなおりました。
急ぎの仕事だったので、とても焦っていて
お礼が遅くなり、申し訳ございませんでした。
大変助かりました。
どうもありがとうございました。

投稿日時 - 2009-07-15 11:20:06

あなたにオススメの質問