• ベストアンサー

プルダウンメニューを作りたい

 javascriptに関して、ほとんど知識がないのですがトップページの メニュー部分を最近よく使われている、プルダウン形式にする様に 依頼されました。 その仕様としては、 オンマウスになったときに、隠されているメニューが表示され、なおかつ ロールオーバーで画像がきりかわり、 マウスオーバーになったときには、また隠れる。 といったものです。いろいろと方法はあるかと思いますが、 <SCRIPT LANGUAGE="JavaScript" SRC="./common/fw_menu.js"></SCRIPT> と、外部ファイルfw_menu.jsを読み込むようにして、fw_menu.jsに は function fwLoadMenus() { if (window.fw_menu_0) return; window.fw_menu_1 = new Menu("root",324,35,"Osaka, MS UI Gothic",12,"","","",""); fw_menu_1.addMenuItem("<A HREF='./topics/index.html' onMouseOver='changeImage('pto01', './img/body-btn-pto01_over.gif');' onMouseOut='changeImage('pto01', './img/body-btn-pto01.gif');'><IMG NAME='pto01' SRC='./img/body-btn-pto01.gif' WIDTH='90' HEIGHT='37' BORDER='0'></A><BR>",""); fw_menu_1.hideOnMouseOut=true; fw_menu_1.writeMenus(); } // fwLoadMenus() と切り替わる画像とそのロールオーバーを記述しました。 結果、オンマウスした時に、指定した座標位置に画像body-btn-pto01.gifはきちんと表示されるのですが、ロールオーバーが作動しません!! おそらく↑の記述にミスがあると思うのですが、その原因がつかめず朝に なってしまいました。。。。  どなたか、javascriptに詳しいかた、↑の記述の間違いを私に教えて下さい。 どうか、よろしくお願い致します。

  • dide
  • お礼率14% (10/70)

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

  • ベストアンサー
noname#199778
noname#199778
回答No.1

スクリプトの中の、シングルクォートの階層がおかしいので動作していないように思います。 fw_menu_1.addMenuItem("<A HREF='./topics/index.html' onMouseOver='changeImage('pto01', './img/body-btn-pto01_over.gif');' onMouseOut='changeImage('pto01', './img/body-btn-pto01.gif');'><IMG NAME='pto01' SRC='./img/body-btn-pto01.gif' WIDTH='90' HEIGHT='37' BORDER='0'></A><BR>",""); この部分ですが、<a>タグの中にあるイベントハンドラ内の関数の呼び出しで、引数を示す部分にもシングルクォートを使っているので、この内容のタグが書き出されたときに、例えば「onMouseOver='changeImage('」でイベントハンドラの解釈が途切れ、正常に関数を呼び出せなくなっているように見えます。 おそらく、HTMLファイルで<a href="***.htm" onMouseOver="window.open("+++.htm","_blank");">と記述しているのと、同じ状況なのではないでしょうか。 イベントハンドラ内の関数の引数をくくる引用符だけを、「&quot;」(&は半角で。便宜上全角にしてあります)に置き換えて、動作するかどうか見てみてはいかがでしょう。 「&quot;」はブラウザに解釈されると「"」に置き換えられ、ブラウザの表示上では、タグの中の引用符としても扱わせることができるはずです。 見当違いでしたら、ごめんなさい。

dide
質問者

お礼

アドバイスありがとうございます。途方にくれていたので、ありがたいです。 さて、さっそく作業をしてみました。 私はjavascriptをよく理解していないので、せっかくのアドバイスを理解できたか不安なのですが。。。 問題の<a>タグの部分を訂正して、↓ <A HREF='./topics/index.html' onMouseOver=&quot;changeImage('pto01', './img/body-btn-pto01_over.gif');&quot; onMouseOut=&quot;changeImage('pto01', './img/body-btn-pto01.gif');&quot;> としてみましたが、やはりロールオーバーは動作しませんでした。 なので、その二の訂正↓ <A HREF='./topics/index.html' onMouseOver='changeImage(&quot;pto01&quot;, &quot;./img/body-btn-pto01_over.gif&quot;);' onMouseOut='changeImage(&quot;pto01&quot;, &quot;./img/body-btn-pto01.gif&quot;);'> としましたが、やはり動作しません。 私の訂正部分に誤りがあるのでしょうか?? すいません、再度アドバイス頂けると幸いです。 よろしくお願いいたします。

その他の回答 (4)

noname#199778
noname#199778
回答No.5

すみません。 勘違いしていました。 ご質問のプルダウンメニューを作るスクリプトと同じと思われるものを見つけてきて、色々試してみたんですが、そのスクリプトで表示されるメニューには、HTMLは導入できますが、画像のロールオーバーは利用できないようでした。 プルダウンメニューを作るにはDHTML的に、ブラウザ上に表示されないようにスタイル指定した要素を作ってそこに画像を配置し、その要素の表示・非表示の切り替え、画像のロールオーバーの制御をJavaScriptで行う方法を取った方がいいようです。 大変失礼しました。

  • 712424
  • ベストアンサー率0% (0/1)
回答No.4

すみません。 勘違いしていました。 ご質問のプルダウンメニューを作るスクリプトと同じと思われるものを見つけてきて、色々試してみたんですが、そのスクリプトで表示されるメニューには、HTMLは導入できますが、画像のロールオーバーは利用できないようでした。 プルダウンメニューを作るにはDHTML的に、ブラウザ上に表示されないようにスタイル指定した要素を作ってそこに画像を配置し、その要素の表示・非表示の切り替え、画像のロールオーバーの制御をJavaScriptで行う方法を取った方がいいようです。 大変失礼しました。

noname#199778
noname#199778
回答No.3

#1です。 解決に至りませんでしたか…すみません。 #2の方の回答の方法もありましたね。 それでもなお動作しなかったときのことですが、エラーメッセージは確認されていますでしょうか? もしエラーメッセージが確認できるのであれば、その内容も添えていただけると判断材料も増えるので、幾分的確な回答を得やすくなると思います(IEのスクリプトエラーの詳細情報では少々漠然としすぎるのですが…)。 また、上記の部分以外にもスクリプトがあるんですよね? そちらの方の問題はありませんか? 上記のスクリプトで書き出しているタグを、そのまま対象のページ上にHTMLとして書き出して、そこで正常に動作するかを確認してみるのも有効かもしれません。 HTMLとして書き出した部分で動作するのであれば、上の関数の記述方法に問題があるということになるでしょうし、それで動作しなければ他のところに問題があるということになると思います。 解決策にはなっていませんが… 失礼しました。

dide
質問者

お礼

 お返事ありがとうございました。 結局のところ、なぜ動作しないのか不明で、もっとシンプルな別の方法に変更しました。(というか詳しい方に、やってもらっちゃいました) ご親切にアドバイスいただきましてありがとうございました。 これからもっと勉強しときます。

  • BlueRay
  • ベストアンサー率45% (204/453)
回答No.2

ズバリ、このようにしてみては如何でしょうか。 ※少し見にくいので、スペースで改行しています。 "<A HREF='./topics/index.html'  onMouseOver='changeImage('pto01', './img/body-btn-pto01_over.gif');'  onMouseOut='changeImage('pto01', './img/body-btn-pto01.gif');'>  …" ↓ "<A HREF='./topics/index.html'  onMouseOver=changeImage('pto01', './img/body-btn-pto01_over.gif');  onMouseOut=changeImage('pto01', './img/body-btn-pto01.gif');>  …" changeImageの呼び出しには、「'」を付けなくてもエラーにはなりませんよ。

関連するQ&A

  • プレロードイメージについて

    こんにちは。プレロードイメージについて教えて下さい。 私は、ロールオーバーボタンのover部の画像を、下記のように外部スクリプトとして、bodyに読み込ませています。 <html> <head> <meta 中略 script-type"content="text/javascript"> <script 中略 javascript"src="./preload.js"></script> </head> <body onload="preloadImages()"> ..... </body></html> +----------------------------------- 外部スクリプトファイル名:preload.js 中身のソース: function preloadImages() { (new Image).src = './img/btn/menu_01-over.gif'; (new Image).src = './img/btn/menu_02-over.gif'; (new Image).src = './img/btn/menu_03-over.gif'; } こんな感じです。ですが、本当に、これで良いのかいつも気になっていました。それは、ヘッダ部でこれを呼び出しているので、bodyタグにonloadは要らないのか、 でも関数名「preloadImages()」にしているので、やはり要るのか、よく判らなくなって悩んでいます。 もし、間違っている場合、どうしたら良いのか教えて下さい。よろしくお願いします。

  • JavaScriptのwindowcloseとボタンのロールオーバーの組み合わせ方

    いまHPを作成中です。 そのなかでクリックすると、指定された大きさで表示される別ウィンドウがあります。 そのウインドウに次の2つのJavaScriptを使いたいのです。 ひとつひとつなら出来るのですが、二つを組み合わせるとどう書いていいのかわかりません。 しかも、ふたつともhead内に書き込むにはどうしたらいいですか? 1、ウインドウに「閉じる」ボタンを付けたい 2、そのボタンはロールオーバー効果を使ってマウスがオーバーのときはボタンが変化するよう、別のgifを表示したい 1,2の詳しい内容です。 1<a href="javascript:window.close();"></a> 2<head> <title>ロールオーバーイメージ</title> <script language="JavaScript"> <!-- function changeImage1(){ document.myimg.src="img2.gif"; } function changeImage2(){ document.myimg.src="img1.gif"; } // --> </script> </head> <body> <p> <a href="javascript:;" onMouseOver="changeImage1()" onMouseOut="changeImage2()"><IMG src="img1.gif" name="myimg" border=0></a> </p> </body>

  • メニューボタン画像のロールオーバー時の処理について

    以下のスクリプトを用いてドロップダウンメガメニューを作成しています。 jQuery MegaMenu Plugin http://www.geektantra.com/2010/05/jquery-megamenu-2/ このメニューのボタンを画像にし、ロールオーバー時には透過して背景が見えるようにしたいと考えています。 --------------------------------------- <script type="text/javascript" src="/_js/jquery-1.7.1.min.js"></script> <script type="text/javascript" src="/_js/jquery.megamenu.js"></script> <script type="text/javascript"> $(function() { .find('img.btn').hover( function(){ $(this).stop().animate({'opacity' : '0'}, 200); }, function(){ $(this).stop().animate({'opacity' : '1'}, 500); } ); }); </script> <ul id="megamenu"> <li> <a><img src="../_images/btn_01.jpg" alt"ボタン1" class="btn"/></a> <div>コンテンツA</div> </li> <li> <a class="mm-item-link-hover"><img src="../_images/btn_02.jpg" alt"ボタン2" class="btn"/></a> <div>コンテンツB</div> </li>↑※このメニューにロールオーバーしている場合、class="mm-item-link-hover"がaに追加される。 <li> <a><img src="../_images/btn_03.jpg" alt"ボタン3" class="btn"/></a> <div>コンテンツC</div> </li> </ul> ------------------------------------- 上記のように記述して、ボタン画像にロールオーバーするとドロップダウンメニューが出現、さらにそのボタン画像が透過し、背景が見えるようにできました。 しかし、画像からマウスをおろしてドロップダウンメニューに移動すると透過が戻ってしまいます。 jquery.megamenu.jsの処理で、ドロップダウンメニューにロールオーバーしている間、class="mm-item-link-hover"がaに追加されています。 これを利用して、a.mm-item-link-hoverのなかのimg.btnを透過GIFに置き換えたいと思いましたが、うまく行きません。 【追加したスクリプト】 $(function() { $("a.mm-item-link-hover").each(function() { $("img.btn").attr("src", "/img/blank.gif"); }); }); 上記の処理の方法は、考え方としては正しいでしょうか? また、その場合のスクリプトはどのように書けばよろしいでしょうか? ご教授頂けると非常に助かります。

  • Dreamweaverでimageのロールオーバー

    Dreamweaverを使ってimageボタンのロールオーバーを指定すると <head>内に記述されるjavascriptのほか、<body>タグの中にも以下のタグが記述されます。 <body onLoad="MM_preloadImages('menu1_over.gif','menu2_over.gif')"> ()内のgif名はボタンがover時の画像名ですが、ロールオーバーするボタンが膨大だと <body>タグ内も膨大なソース量になってしまいます。 試しに削除してみたところIEでは正常にロールオーバーが動作します。 上記の記述は何を意味しているのでしょうか。 不足な情報があれば補足させていただきますので、お知恵をお貸し下さい。

  • 画像を変えるスクリプト

    <HTML> <HEAD> <TITLE></TITLE> <SCRIPT language="JavaScript"> <!-- img=new Array(); for(i=1;i<=4;i++){ img[i]=new Image(); img[i].src="img"+i+".gif"; } function changeImage(i,j){ document.images[i].src=img[j].src; } // --> </SCRIPT> </HEAD> <BODY> <CENTER> <A href="#" onMouseOver="changeImage(0,2)" onMouseOut="changeImage(0,1)"><IMG src="img1.gif" border=0></A><BR> <BR> <A href="#" onMouseOver="changeImage(1,4)" onMouseOut="changeImage(1,3)"><IMG src="img3.gif" border=0></A> </CENTER> </BODY> </HTML> マウスオーバーしたら画像が変わるスクリプトです。 質問ですがこのスクリプトでどうしてオブジェクトを作っているのでしょうか? 普通にsrcプロパティを変更するだけではだめなのでしょうか?例えばdocument.images[i].src="img"+j+".gif"のようにしてiとjを変えるような 感じです。

  • スワップイメージ+ページ内移動(NN4.7)

    JavaScriptについて初心者です。どなたか分かる方いましたら、ご教授願います。 【仕様】 ボタンを押下すると、以下の挙動を同時にする。(ボタンは複数) ・同一ページ内の別の画像が切り替わる。 ・同一ページ内の指定した場所へ移動する。 いろいろと調べて以下のようなJavaScriptを作成しました。 <html> <head> <script type="text/javascript"> <!-- function chimg01(){ document.img01.src='images/img01_b.gif' document.location.replace("#a"); } function chimg02(){ document.img01.src='images/img01_c.gif' document.location.replace("#a"); } --> </script> </head> <body> <a name="a"></a> <img src="images/img01_a.gif" alt="あああ" width="400" height="200" name="img01"> --(省略)-- <a href="javascript:chimg01();"><img src="images/btn01.gif" alt="切り替えボタン" name="btn01" border="0"></a> <a href="javascript:chimg02();"><img src="images/btn02.gif" alt="切り替えボタン" name="btn02" border="0"></a> </body> 上記の記述で、IEなどは問題ないのですが、NN4.7の場合、ページをリロードしてしまい、画像の切り替えが効きません。 ブラウザ振り分けで、NN4.7のみ他のjsを読み込むようにした方が良いでしょうか? その場合の記述方法も分かれば、お願いしますm(-_-)m

  • Javascript外部リンクの書き方(初心者)

    以下のJavascriptを外部リンクにしたいのですが、記述の仕方が分かりませんので、お教えください。 (引用元:Javascript例文辞典) <html> <head> <title>一定時間ごと画像を入れ替える(複数箇所に異なる画像[規則的なファイル名版])</title> <script language="JavaScript"><!-- count = 0; function changeImg() { count++; count %= 4; document.btn1.src = "a" + count + ".gif"; document.btn2.src = "b" + count + ".gif"; } // --></script> </head> <body onLoad="setInterval('changeImg()',2000)"> <img src="a1.gif" name="btn1"> <img src="b1.gif" name="btn2"> </body> </html>

  • プルダウンメニューの表示

    +のgifをクリックすると-のgifと詳しい表示が出る様にHTMLを書いたのですが、 表示された後で閉じると、その+のgifが再表示されません。 何が足りなくてそうなってしまうのでしょうか? また、親メニューの+が-になっている時、gifの-を表示させる方法を教えてやって下さい…。 よろしくお願いします。 <body bgcolor="#000000" text="#ffffff" link="#000000" alink="#808080" vlink="#ff0000"> <div id='div1' style="position:absolute; left:10; top:100; width:250;"> <a id="menu1" href="#" onClick="onmenu(this,'menu11');return false" style="text-decoration:none;"> <img src="p.gif" alt="+" border="0"></a><font size="+2">BBS</font> <div id="menu11" style="position:absolute; left:-2; top:16; visibility:hidden;"> ├<a href="http://…" target="_top" style="text-decoration:none;"> <img src="m.gif" alt="-" border="0"></a> aBBS<br> ├<a href="http://…" target="_top" style="text-decoration:none;"> <img src="m.gif" alt="-" border="0"> </a> bBBS<br> └<a href="http://…" target="_top" style="text-decoration:none;"> <img src="m.gif" alt="-" border="0"></a> cBBS </div></div></div> </body>

    • ベストアンサー
    • HTML
  • 一つのページで二つ動かすのはできないですか

    画像を次々に変えていくJavaScriptを一つのページで2個使いたいのですが、二つ使うと、表示されません。これでは無理なのでしょうか? 無理だったら、他に何かいい方法があれば教えてください。 これを使いました。よろしくお願いします。 <HTML> <HEAD> <TITLE></TITLE> <SCRIPT language="JavaScript"> <!-- num = 18; nme = "img" exp = "gif" cnt = 0; function changeImage() { cnt++; cnt %= num; document.img.src = nme + cnt + "." + exp; } //--> </SCRIPT> </HEAD> <BODY bgcolor="#ffffff" onLoad="setInterval('changeImage()',500)"> <BR><BR> <IMG src="img1.gif" name="img" border="0"> </BODY> </HTML>

  • 外部参照の時のロールオーバーがわからない!

     ちょっと長くなり失礼します。ドリームウェバーでロールオーバーを作ってみて、それを外部読み込みの形にしたくやってみやのですが、オンマウスの時に画像が変わりません。 どうかまちがいを教えてください。 HTMLファイル <html> <head> <title>ためし</title> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <script type="text/javascript" src="b.js"> </script> </head> <body bgcolor="#FFFFFF" text="#000000" onLoad="MM_preloadImages('b.gif')"> <script type="text/javascript" src="a.js"> </script> </body> </html> ”a.js”ファイル document.write("<a href='http://okweb.jp/' onMouseOut='MM_swapImgRestore()' onMouseOver='MM_swapImage('Image1','','b.gif',1)'><img name='Image1' border='0' src='a.gif'></a>");