onMouseOver & onMouseOut

[上に] [前に] [次に]
みんこ [E-Mail] [HomePage] 1998/12/07(月) 18:11:53
どうしても分からなかったので質問します。

IE3でも画像をonMouseOverで変えられたらいいなあと思って
以下のようなスクリプトを作りました。

<SCRIPT LANGUAGE="JavaScript">
<!------------

function outcng(){
document.s1.src = "outpct1.gif";
}
function overcng(){
document.s1.src = "overpct1.gif";
}
//-->
</script>

<a href="#" onMouseOver="overcng();return false;" onMouseOut="outcng();return false;">
<img src="outpct1.gif" width=320 height=240 border=0 name="s1">

この段階では確かにIE3とNN3で(Mac)動きました。
しかし、いざ使用段階になって、NN3でエラーが出ました。

<script language="JavaScript">
<!--//
function outmoon(){
document.moon.src = "moon1.gif";
}
function overmoon(){
document.moon.src = "moon2.gif";
}
//-->
</SCRIPT>

<a href="#one" onMouseOver="overmoon();return false;" onMouseOut="outmoon();return false;">
<img src="moon1.gif" width=100 height=100 border=0 name="moon"></a>

何度元のスクリプトをコピーして書き直しても、同じファイルに
両方のスクリプトを入れてみても、上のスクリプトだけ動いて
下ではエラーが出ます。

エラーの内容は「document.moonは"src"という名前のプロパティはない」

そりゃねーだろうとか一日中一人つっこみを入れている状態です。
お願いします。どこが悪いのか教えて下さい。
また、WinIE&NN3でこのスクリプトが動くのかも教えていただけると
助かります。

(CUTEというテキストエディタで書いているのですが、たま〜に
正しいソースでもエラーを出すファイルを作ることがあります。
そういうときはソースをそっくり新規ファイルにコピーして
そちらを使うと直ります。今回もそうかと思ってコピーしましたが
無駄でした。)

omi 1998/12/07(月) 19:20:07
これ、面白いですね。φ(. .)memo
気になるのは、href="#one" なんですが。

しばゴン 1998/12/07(月) 19:38:53
function outmoon(){
document.moon.src = "moon1.gif";
}
function overmoon(){
document.moon.src = "moon2.gif";
}

function outmoon(){
this.document.moon.src = "moon1.gif";
}
function overmoon(){
this.document.moon.src = "moon2.gif";
}
のようにしてみては?

Tiot [HomePage] 1998/12/07(月) 20:53:12
<img ..... name="moon">のmoonを何か他の名前に変えてもエラーが出てしまうでしょうか
(JavaScriptの対応する個所も変える)。
上のスクリプトと違うところはnameくらいですので、それが原因じゃないかなと。
<img ..... name="moon">のname="moon"は
HTML文書のなかでユニーク(他に同じ物がない)になっていますか?
たとえば、<a .... name="moon">のように、同じnameのものがあった場合、
document.moonがどちらをさすか、インタプリタが
判断できずにエラーをかえしてしまうことがあります。
#最近のブラウザだと、結構適当に解釈してうまくやってくれる。
#フォームとかを操作する場合もnameはユニークにしておくのが無難。

あと、Win+IE3.0はバツで、Win+IE4.0はマルでした。
WinIE3.0のJavaScriptはイメージオブジェクトを
サポートしていなかったと思うので、多分無理ではないでしょうか。
3.01は持ってないのでわかりませんが、
もしかしたらできるかも(WinIE3.0と3.01は動作が大分違う)。
とほほさんのhttp://www.tohoho-web.com/wwwxx001.htmに、
エラーを出さない方法なら書いてあります。

mo [E-Mail] 1998/12/07(月) 21:53:20
document.images["s1"].src = "outpct1.gif";
のようにするとどうなりますか?

みんこ [E-Mail] 1998/12/07(月) 23:11:28
今、うちに帰って来たのでNN3なくて(って会社でチェックすんなよ...)
試し様がないのですが、アドバイスたくさんありがとうございます。

>omi様
>気になるのは、href="#one" なんですが。
これはですね、href="#"にしたいところなのですが、最近のブラウザは
こうするとページのトップに戻ってしまうので(ページを長々と使っているので...)
適当に区切りを付けて表示が面の一番上になるところにリンクを
はっているんです。直接関係ないと思います。

>Tiot様
>何か他の名前に変えてもエラーが出てしまうでしょうか
出ます。始めs1、s2...の様にしていましたが出ました。
上のスクリプトでは出ないのに。
ちなみに、同じスクリプトを4つ併用してまして、それぞれに
違う名前を付けてますが、どれもこれも同じエラーが出ます。

あと、とほほさんのアラカルトも見たのですが、
これだとMacIE3は動かないんですよ。
動くように作りたいんです。よそで見たことないので。
多分、mo様御指摘のimagesも駄目だった様な気が。(明日確認します)

基本的にIE3はリンクのonMouseOvsrは対応していて、画像の書き替えも
ヘッダに何もかかない状態でできるのですが、
それだとマウス乗せてから読み込みに時間がかかるので、
それを防ぐためにヘッダに画像の名前書き込んで先に読み込ませたかっただけなのですが。
何でこんなに手間が....。

3段飛び必殺技でBODY部分の一番上に画像をheight=1 width=1で
全部読み込ませて呼び出す...なんてものも考えたのですが...。
(根本的には何の解決にも。)

御指摘いただいたスクリプトは明日確認させていただきます。

みんこ 1998/12/08(火) 17:06:37
確認してみました。

結果から言うと、this.document.moon.src = "moon1.gif"; はエラー、
document.images["s1"].src = "outpct1.gif"; はオッケーでした。

WInIE3.0はJavaScript1.0対応なので根本的にできない...みたいです。がく。

まあそれはバージョンチェックではねるとして、
(MacIE3は通るので本来の目的は果たしてますから)
WinIE3.01ならどれでも大丈夫でしょうか?

ところで...今日も悩んでますが元の質問です。
何で同じスクリプトでエラーが出るのでしょう。
違うエディタでファイル作っても出ますのでやはりスクリプトが
どこかおかしいみたいなのですが。
というより、エラーのでないスクリプトをコピーして
画像名だけ書き換えてみてもエラーになります。(nameとかは合わせてます。)

うーん、もうちょっと試してみます。

みんこ 1998/12/08(火) 18:25:55
[[解決]]
解決、というか...

同じスクリプトをあちこちに貼ってみた結果、
何故かページのトップにある場合は動いて、その他の位置
(テーブルタグの中、外、ページの一番下)にあるときは
エラーが出ました。

こういうことがあるのか〜という感じですが、
ということはつまり本文のHTMLがどこかおかしくて影響しているんだと
思います。
とりあえずスクリプト自体は間違ってない様です。

皆様ありがとうございました。

できれば、「こういうタグの間違いがあるとエラーしやすい」とか
ありましたら教えて下さい。
ちなみにNN3.0でも、ページ自体は見る限りきっちりと表示されています。

みんこ 1998/12/09(水) 09:19:39
その後のご報告を一応。

別のスクリプトで背景色変更ボタンを付けていたのですが、
そこの<form>の閉じタグを忘れていました。はは。
「?」と思って入れてみたら動きました。お騒がせしました〜。

[上に] [前に] [次に]