アプリ版:「スタンプのみでお礼する」機能のリリースについて

フレームページで、JavaScriptで文字(下の場合は「親メニュー」)クリックすると
開閉するツリーメニューを使用したいと思っています(フレームあり・なしは訪問者の自由で選べるようにしています)。

http://himajin.moo.jp/menu/menu.html ここや、
http://www.openspc2.org/reibun/javascript/#8 こちらの05・06・63などを参考にして、
自分なりにシンプルに変更してみたのですが、記述に問題点などはありますでしょうか?

以下が、そのソースです(簡略化しています)。
<html>
<head>
<script type="text/JavaScript">
<!--
function treeMenu(tName) {
 tMenu = document.getElementById(tName).style;
 if(tMenu.display == 'none') tMenu.display = "block";
 else tMenu.display = "none";
}
//-->
</script>
</head>
<body>
<a href="JavaScript:treeMenu('treeMenu1')">親メニュー</a>
<div id="treeMenu1" style="display:none">
 <li><a href="a.html" target="main">子メニュー</a></li>
 <li><a href="b.html" target="main">子メニュー</a></li>
</body>
</html>

また、「document.all」はIE専用だと聞いたので「document.getElementById」
に変更してみたのですが、これでほかのブラウザでも問題は無く使用できますか?
JavaScriptは初めてなのであまり自信がありません。
IEとFirefoxでは動作確認済みです。よろしくお願いします。

A 回答 (3件)

個人的にはliを使うならulの子供で使います。


上にマージンができてしまうのは、margin-top:0px;を
しておけばよいでしょう。
あと、スキキライになりますが、こんかいのif条件は
三項演算子を使ったほうがわかりやすいかも・・・。

<html>
<head>
<script type="text/JavaScript">
<!--
function treeMenu(tName){
tMenu = document.getElementById(tName).style;
tMenu.display=(tMenu.display=='none')?"block":"none";
}
//-->
</script>
</head>
<body>
<a href="JavaScript:treeMenu('treeMenu1')">親メニュー</a>
<ul id="treeMenu1" style="display:none;margin-top:0px;">
<li><a href="a.html" target="main">子メニュー</a></li>
<li><a href="b.html" target="main">子メニュー</a></li>
</ul>
</body>
</html>
(実際に本運用の際はcssを外部化したりしたほうので
しょうけど、とりあえずは今回はわかりやすく直接
タグに指定をいれてあります)

ちなみに、divにdisplay:noneを直接書きこんでますが
このままではjavascriptなしのブラウザでは、子メニューが
まったく表示されなくなりますが、よろしいのでしょうか?
    • good
    • 0
この回答へのお礼

<li>タグを使用する場合には<ul>も必要だということを失念していました。
『tMenu.display=(tMenu.display=='none')?"block":"none";』
の部分も、とても分かりやすいです。
少し書き足すだけでいいので、やってみますね。
子メニューはどうしても表示させたいわけではないのですが、
(だったらやらなければいいのですが^^;)#2の方も
仰るように、初めから表示させておいて、訪問者の好みで
非表示にさせるという手もありますね。

回答ありがとうございました。とても参考になりました!

お礼日時:2006/09/17 11:12

getElementById は、今頃のブラウザでは大抵使えると思いますが、


使えないブラウザでエラーになってしまうことが心配なら、
if(document.getElementById){//使える
}
の様にすればいいかもしれません。
また、スクリプトが動作しない環境(getElementByIdが使えない場合も含む)でメニューを開く方法がなくなるということに危惧があるなら、
デフォルトの状態を開いてある状態にして、onload で閉じるような感じにした方がいいのかもしれません。
    • good
    • 0
この回答へのお礼

getElementByIdが大抵のブラウザで使用できるとのことなので、少し安心しました。
そうですね。if文を使うなどして、エラー回避をするのもいいかもしれません。
メニューは、どうしても開閉できないとダメ、というわけではないので、
もう少し考えてみることにしますね。

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

お礼日時:2006/09/17 11:04

出現するコンテナの<div>タグが閉じてないように見えますが。


それは簡略化の際のケアレスミス?

この回答への補足

すいません、簡略化した際に書き忘れてしまったようです。
実際の(ホームページ用の)ソースには</div>は入っています。
私のとじ忘れでした^^;

</div>があるものと思って見ていただけると幸いです。
本当に申し訳ありません!

補足日時:2006/09/16 15:48
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
今回はより参考になった#2・3の方にポイントを
つけさせていただきました。ご了承ください。

お礼日時:2006/09/17 11:14

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