電子書籍の厳選無料作品が豊富!

ホームページのコーディングをしている者ですが、一部のjavascriptがfirefoxで効きません。
クリックした際にサブメニューを表示させていのですが、firefoxだとクリックしてもサブメニューが表示されません。
(IE、safariは正常に表示されます)
どなたか下記ソースでの間違えをご教授いただけますでしょうか。
よろしくお願いします。

【jsファイルの記述】
function dispChange(id) {
if(id.style.display=="none"){
id.style.display="block";
}
else{
id.style.display="none";
}
}

【htmlファイルの記述】
<div id="sublist"><a href="JavaScript:dispChange(movieSub)">&gt;&gt;test</a>
<div id="movieSub" STYLE="display:none">
<div class="SubSub">├<a href="#">test</a></div>
<div class="SubSub">├<a href="#">test</a></div>
<div class="SubSub">└<a href="#">test</a></div>
</div>
</div>

A 回答 (2件)

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dt …
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
<head>
<title>Q4132865 TestCase 1</title>
<script type="text/javascript">//<![CDATA[

//【最大の問題点】
//idは文字列であるべきだと思う。
//styleプロパティがあるのは要素なので
//document.getElementByIdを受け取って
//要素を返すようにしてみた

function dispChange(id) {
var element = document.getElementById(id);
if (element == null){
//何書こうかな。
}

if(element.style.display=="none"){
element.style.display="block"; //要素によってはblockではなく空文字列のほうがいいこともある。
}
else{
element.style.display="none";
}

}


//]]>
</script>
</head>
<body>
<!--
説明の都合上,嫌々ながら元のコードをあまり変えなかったが
個人的にはこのマークアップ嫌いでdl,dt,dd要素を使って欲しい
また、安易にa要素をscript発動用要素として用いて欲しくないと思っている。
自分なら全然違うものを書いている
-->
<div id="sublist">
<a href="javascript:dispChange('movieSub')">&gt;&gt;test</a>
<div id="movieSub" style="display:none">
<div class="SubSub">├<a href="#">test</a></div>
<div class="SubSub">├<a href="#">test</a></div>
<div class="SubSub">└<a href="#">test</a></div>
</div>
</div>
</body>
</html>
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

firefoxでもうまく動作しました。

idに関してはおっしゃるとおりです。

わざわざ元コードの変更が少なくなるようなコードまで記述して下さり、ありがとうございました。

お礼日時:2008/06/27 15:52

間違いというわけではないのですが、


IE、Safari、Operaは<div id="movieSub">このように書いたエレメントに対して、
id.style.displayのように、メンバ変数に . でつないでアクセスするJavaScriptらしい書き方で、
window.movieSub("window"は省略可能)が使えますが、
Firefoxのみこの方式をサポートしていません。

IEのみdocument.all.movieSubという形式もサポートしています。


<div id="movieSub">にアクセスするには
document.getElementById('movieSub')を使ってください。
document.getElementByIdは最近のメジャーなブラウザは全てサポートしています。
    • good
    • 0
この回答へのお礼

ご丁寧な回答ありがとうございました。

firefoxでもうまく動作するようになりました。

お礼日時:2008/06/27 16:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!