• ベストアンサー

ポップアップメニューの制御について

こんにちは。 現在、ポップアップメニューの制御がうまくいかず困っております。 [やりたいこと] ・リンクの上にマウスを置くとポップアップメニューが開く ・ポップアップメニューからマウスが外れるとポップアップメニューを閉じる ・対応したいブラウザはIE6,IE7,FireFox2.0 他のサイトを参考にした結果、onmouseoverのイベントでメニュー表示まではできたのですが、メニューからマウスを外した時にメニューを閉じる処理がうまくいっておりません。onmouseoutを使うとできそうなのですが、メニューからではなく、リンクからマウスを外した時にメニューが消えてしまい困っています。 解決のヒントになることでも結構ですので、アドバイスを頂けたらと思います。現在はclearTimeSetやclearTimeoutで制御できないかを調べている最中です。 よろしくお願いいたします。 [HTMLのソース(一部抜粋)] <div id="testmenu1" style="position: absolute;visibility: hidden;(省略)"> <ul style="(省略)"> <li><a href="#">メニュー1</a></li> <li><a href="#">メニュー2</a></li> <li><a href="#">メニュー3</a></li> </ul> </div> <div id="testmenu2" style="position: absolute;visibility: hidden;(省略)"> <ul style="(省略)"> <li><a href="#">メニュー1</a></li> <li><a href="#">メニュー2</a></li> <li><a href="#">メニュー3</a></li> </ul> </div> <table> <tr><td> <a href="" onclick="return false;" onmouseover="testShowPopupMenu('testmenu1'); return false;" onmouseout="testHidePopupMenu('testmenu1'); return false;">メニュー1</a> </td></tr> <tr><td> <a href="" onclick="return false;" onmouseover="testShowPopupMenu('testmenu2'); return false;" onmouseout="testHidePopupMenu('testmenu2'); return false;">メニュー2</a> </td></tr> </table> [JavaScriptのソース(一部抜粋)] var mX = 0; var mY = 0; var pX = 5; // マウスから右に5ピクセルずらす var pY = 5; // マウスから下に5ピクセルずらす document.onmousemove = testGetMousePoint; // マウス位置取得 function testGetMousePoint() {  mX = event.clientX + document.body.scrollLeft;  mY = event.clientY + document.body.scrollTop; } // ポップアップメニューの表示 function testShowPopupMenu(id) {  pop = document.getElementById(id).style;  pop.visibility = "visible";  pop.left = mX + pX + "px";  pop.top = mY + pY + "px"; } // ポップアップの非表示 function testHidePopupMenu(id) {  document.getElementById(id).style.visibility = "hidden"; }

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

  • ベストアンサー
  • leap_day
  • ベストアンサー率60% (338/561)
回答No.2

こんにちは ポップアップメニューからonMouseoutしたときに非表示にしたいのであればポップアップメニューの方・・・つまり<div>の方にonMouseoutをつけてやればいいと思います

その他の回答 (1)

noname#39970
noname#39970
回答No.1
rirakuma01
質問者

お礼

ありがとうございます。 下記を参考に試して、ほぼ完成はしたのですが、 リンクの数が多い場合の非表示化(配列をループさせる)の 処理が気になっているところです。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1282110 サブメニューを共通化するように検討してみます。 教えて頂いたサイトも参考にさせて頂きます。

関連するQ&A

  • CSSでポップアップメニューを作成したがIEだけメニューが表示されません。

    下記のようなCSSでポップアップメニューを作成したのですが IEだけポップアップメニューが表示されませんでした。 IEでもポップアップメニューが表示されるようにするには どのようにすればよいのでしょうか?(JavaScriptは未使用で作成) <html> <head> <style type="text/css"> #menu { position: relative; width: 102px; height: 22px; } #menu li { list-style-type: none; float: left; } #menu li a { color: gray; width: 100px; height:20px; text-decoration: none; text-align: center; border: 1px solid gray; display: block; } #menu li a:hover { background-color:#FFFFCC; } #menu ul li ul { display: none; } #menu ul li:hover ul { display:block; position:absolute; top: 22px; left: 0; } </style> </head> <body> <div id="menu"> <ul> <li> <a href="#">home</a> <ul> <li><a href="#">first</a></li> <li><a href="#">second</a></li> <li><a href="#">third</a></li> </ul> </li> </ul> </div> </body> </html>

    • ベストアンサー
    • HTML
  • ポップアップメニューの作成方法を教えてほしい

    いろいろなサイトを見ながらポップアップメニューを作成しています。 ポップアップメニューのマウスオーバした時に表示されるメニューを表のように枠を入れたいのですがどうしたらいいのかわかりません。 ご教授いただけると大変助かります。 作成しているHTMLは下記になります。自由に変更していいです。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <!-- TemplateBeginEditable name="doctitle" --> <style type="text/css"> <!-- body,td,th {font-size: small; } --> body {padding: 30px; } /* 全体の文字の色 テキストの下線など*/ ul.menu a { color: #ff6100; text-decoration: none; text-align: center; border-color: #000000; } ul.menu a:link, /* 全体の表の背景の色 */ ul.menu a:visited { background: #ffffff } /* 表全体 マウスオーバー時の背景の色 */ ul.menu a:hover{ background-color: #FF6; } ul.menu a:active { } /* 診療科 セルの変更 */ ul.menu li { float: left; position: relative; margin: 0 ; width: 9em; height: 2em; font-weight: none; line-height: 2em; } ul.menu li a { display: block; width: 9em; height: 2em; text-align: left; border:none; } ul.menu li ul li { float: none; margin: 0; font-weight: normal; border:none; } /* 下層のメニューを不可視に */ ul.menu li ul, ul.menu li ul li ul { display: none; } /* 疑似要素 :hover で子メニューを可視、孫メニューを不可視に 各科のセル 診療科*/ ul.menu li:hover ul { display: block; position: absolute; top: 0; left: 8em; z-index: 200; } * html ul.menu li:hover ul { vertical-align: bottom; /* IE6 で変な隙間が空くのでその対策 */ } ul.menu li:hover ul li ul { display: none; } /* 疑似要素 :hover で孫メニューを可視に */ ul.menu li ul li:hover ul { display: block; position: absolute; top: 0; left: 8em; z-index: 200; } </style></head> <table width="208" border="0" cellspacing="0" cellpadding="0" background=""> <tr> <td colspan="2" bgcolor="#FFFFFF"><ul class="menu"> <li><a href="#">■診療科</a> <ul><li style="display:inline"> <a href="program/02gairai/naika02.html" target="_parent">内科</a></li> <li style="display:inline"> <a href="program/02gairai/sannfu02.html" target="_parent">産婦人科</a></li> <li style="display:inline"> <a href="program/02gairai/masui02.html" target="_parent">麻酔科</a></li> <ul> <li style="display:inline"> <a href="program/02gairai/geka02.html" target="_parent">外科</a></li> <li style="display:inline"> <a href="program/02gairai/hifuka02.html" target="_parent">皮膚科</a></li> <li style="display:inline"> <a href="program/02gairai/sikakoukuu02.html" target="_parent">歯科口腔外科</a></li> <ul><li style="display:inline"> <a href="program/02gairai/seikei02.html" target="_parent">整形外科</a></li> <li style="display:inline"> <a href="program/02gairai/ganka02.html" target="_parent">眼科</a></li> <li style="display:inline"> <a href="program/02gairai/sinkei02.html" target="_parent">神経内科</a></li> <ul><li style="display:inline"> <a href="program/02gairai/nousinkei02.html" target="_parent">脳神経外科</a></li> <li style="display:inline"> <a href="program/02gairai/jibiinkouka02.html" target="_parent">耳鼻咽喉科</a></li> <li style="display:inline"> <a href="program/02gairai/housya02.html" target="_parent">放射線科</a></li> <ul><li style="display:inline"> <a href="program/02gairai/syounika02.html" target="_parent">小児科</a></li> <li style="display:inline"> <a href="program/02gairai/hinyou02.html" target="_parent">泌尿器科</a></li> <li style="display:inline"><a href="program/02gairai.htm" target="_parent">診療部</a></li> </ul> </ul> </ul> </ul> </ul> </li> </ul></td> </tr> 長くなりましたがどうぞよろしくお願いいたします。

    • 締切済み
    • CSS
  • 展開メニューの修正

    展開メニューの修正 をしています。 menu.js------------------------ function block(id){ if(document.getElementById){ if(document.getElementById(id).style.display == "none"){ document.getElementById(id).style.display = "block"; }else if(document.getElementById(id).style.display == "block"){ document.getElementById(id).style.display = "none"; } } } html--------------------------- <div onMouseOut="block('block1')"> <div onMouseOver="block('block1')"><a href="***">コンテンツ名</a></div> <div id="block1" style="display: none;"> <ul> <li><a href="***">サブコンテンツ</a></li> <li><a href="***">サブコンテンツ</a></li> <li><a href="***">サブコンテンツ</a></li> <li><a href="****">サブコンテンツ</a></li> </ul></div></div> 「コンテンツ名」に触った時展開して、サブコンテンツor「コンテンツ名」から離れた時にサブコンテンツを閉じる、という挙動まではできているのですが、 サブコンテンツのメニュー間を移動する際にちらつくというかいちいち閉じてしまうのを直したいのですが、どうしたらいいのでしょうか? よろしく御教授ください。

  • 開閉式メニューのhrefが効かない

    お世話になります。 下記のようなソースでドロップダウンメニューを作って、 動作はしたのですが、肝心のメニューをクリックした時に該当するhtmlファイルに飛びません。 初歩的なことで申し訳ないのですが、サブメニュー内のaタグを動作させるには何か足りないものがあるでしょうか? 教えていただければ助かります。 js <script type="text/javascript"> $(function(){ $("#header-bn").click(function(){ $("#backnumbers").slideToggle(); return false; }); }); </script> HTML <ul> <li>メニュー1</li> <li>メニュー2</li> <li id="header-bn"><a href="september.html">メニュー3</a> <ul id="backnumbers"> <li><a href="8.html">8</a></li> <li><a href="7.html">7</a></li> </ul> </li> </ul> おそらくはhead内に記述したreturn false;の記述で aタグのhref要素が無効にされてしまうと思うのですが、 jsには詳しくなく、単純に削ってしまうと開閉メニューが 機能しなくなるので、これをどう書き換えたらリンクが機能する 開閉式メニューが作れるかお知恵を頂ければ助かります。 よろしくお願い致します。

  • JavaScriptで折りたたみメニュー

    現在、JavaScriptを利用して折りたたみメニューを作成しました。 2つの項目の下にそれぞれ下層メニューがあり、各項目をクリックするごとに下層メニューが開いたり閉じたりできる状態なのですが、 このどちらかの項目をクリックしたとき、その項目の下層メニューは表示されるが、もう一方の項目の下層メニューは閉じる。というようにするにはどうすればよいでしょうか?(両方の下層メニューが同時に開いている状態が無いように。) よろしくお願いいたします。 【XHTML】 <ul> <li><a href="javascript:exMenu('treeMenu1')">項目1</a> <ul id="treeMenu1" style="display:none"> <li><a href="#">項目1-1</a></li> <li><a href="#">項目1-2</a></li> <li><a href="#">項目1-3</a></li> </ul> </li> <li><a href="javascript:exMenu('treeMenu2')">項目2</a> <ul id="treeMenu2" style="display:none"> <li><a href="#">項目2-1</a></li> <li><a href="#">項目2-2</a></li> <li><a href="#">項目2-3</a></li> </ul> </li> </ul> 【JavaScript】 function exMenu(tName) { tMenu = document.getElementById(tName).style; if (tMenu.display == 'none') tMenu.display = "block"; else tMenu.display = "none"; }

  • ドロップダウンリストの高さを、非表示のときは上に詰

    初心者です。本当に初歩な質問で申し訳ありません。 ドロップダウンリストを作り、クリックしたときにサブメニューを表示したいのですが、 表示、非表示は切り替えられても、非表示のときに空欄ができてしまいます。 これを、非表示のときは上に詰めて表示するようにしたいのですが、その方法を 教えてください。 下記がそのソースになります。 <SCRIPT language="JavaScript"> <!-- function pullDown1(ss) { for(d0 = 0 ; d0 < ID.length ; d0 ++) { ID[d0].style.visibility = "hidden"; } ID[ss].style.visibility = "visible"; } //--> </SCRIPT> </HEAD> <BODY> <ol> <li><A href="javaScript:pullDown1(0)">メニューを表示する</A> <DIV id="ID" style="visibility:hidden;"> <ul> <li><A href="">A</A></li> <li><A href="">B</A></li> <li><A href="">C</A></li> <li><A href="">D</A></li> </ul> </DIV> </li> <li><A href="javaScript:pullDown1(1)">メニューを表示する</A> <DIV id="ID" style="visibility:hidden;"> <ul> <li><A href="">a</A></li> <li><A href="">b</A></li> <li><A href="">c</A></li> <li><A href="">d</A></li> </ul> </DIV> </li> </ol> </BODY> 以上、よろしくお願いいたします。

  • 領域外をクリックすることで開閉メニューを閉じる方法

    お世話になっております。 メニュー3をクリックするとサブメニューが出たり閉じたりするタイプの開閉メニューを作ったのですが、 開くときはメニュー3のクリックで開閉メニューが表示され、 閉じる時は #backnumbers 以外の領域をクリックすることで閉じるようにしたいと言われて 今試行錯誤しております。 例えば↓のような感じのコードなどを追加してみたりして やってみてるのですが、 $(this).click(function(){ $("#backnumbers").hide(); return false; }); 消えるのは消えるんですが、backnumbers内の領域をクリックしても消えてしまい、 aタグの設定が消えてしまうので、これを上手く処理する方法はないでしょうか? 下記のコードで今組んでいっています。 js <script type="text/javascript"> $(function(){ $("#header-bn > a").click(function(){ $("#backnumbers").slideToggle(); return false; }); }); </script> HTML <ul> <li>メニュー1</li> <li>メニュー2</li> <li id="header-bn"><a href="september.html">メニュー3</a> <ul id="backnumbers"> <li><a href="8.html">8</a></li> <li><a href="7.html">7</a></li> </ul> </li> </ul>

  • JavaScript document.writeについて

    <ul id="font-size-change"> <li><a href="javascript:void(0)" onclick="setActiveStyleSheet('default'); return false;" />標準</a></li> <li><a href="javascript:void(0)" onclick="setActiveStyleSheet('large'); return false;" />大</a></li> </ul> 上記を、JavaScriptの「document.write」を使って表示しようと、下記のコードを書きました。 function fontSizeChange(){ document.write('<ul id="font-size-change">'); document.write('<li><a href="javascript:void(0)" onclick="setActiveStyleSheet'); document.write("('default'); "); document.write('return false;" />標準</a></li>'); document.write('<li><a href="javascript:void(0)" onclick="setActiveStyleSheet'); document.write("('large'); "); document.write('return false;" />大</a></li>'); document.write('</ul>'); } とっても効率が悪い記述だと思うのですが、 もっとシンプルで効率の良い書き方はないでしょうか。 よろしくお願いします。

  • 折りたたみメニューがFirefoxで認識されない

    ホームページに折りたたみ式のメニューを設置しようと思い以下の用件を満たすプログラムを検索しました。 「別のメニューをクリックすると閉じる折りたたみメニュー」 ホームページの縦幅を固定するレイアウトのためにメニューをすべて開いてしまうと固定幅に収まらないためです。 選択している一つ以外は閉じているという状態を維持するものです。 以下の案件を見つけました。 http://oshiete1.goo.ne.jp/qa1436588.html この例にならって設置してみました。 IE7ではうまく動作しますが、Firefox3.0ではポインタが変化せずクリックもできません。 ソースは以下です。 ------------------------------ <script language="JavaScript"> <!-- function doClick() { var strName; var intNo; myObj = window.event.srcElement; if((myObj.id=="")||(myObj==null))return true; /* 対象となるメニューを取得 */ strName = myObj.id + "_menu"; var thisMenu = document.all.item(strName); if(thisMenu !=null) if(thisMenu.style.display == "block") { /* 対象メニューが開いていたらそれを閉じるだけ */ thisMenu.style.display = "none"; } else { /* 対象メニューを開く */ thisMenu.style.display="block"; intNo=1; strName="cate" + intNo + "_menu"; while(document.all.item(strName)!=null) { /* 対象メニュー以外は閉じる */ if(thisMenu != document.all.item(strName)) document.all.item(strName).style.display="none"; intNo++; strName="cate" + intNo + "_menu"; } } } //--> </script> ------------------------------ 本文は ------------------------------ <body onclick="doClick()"> <ul> <li><a id="cate1">カテゴリ</a> <ul id="cate1_menu" style="display:none;"> <li><a href="index.html">menu1</a></li> <li><a href="index.html">menu2</a></li> </ul></li> <li><a id="cate2">カテゴリ</a> <ul id="cate2_menu" style="display:none;"> <li><a href="index.html">menu3</a></li> <li><a href="index.html">menu4</a></li> <li><a href="index.html">menu5</a></li> </ul></li> </ul> </body> ------------------------------ です。いろいろ試してみましたが初心者のため不具合箇所が特定できません。。 ご教授願えませんでしょうか。

  • jqueryを使ってポップアップを作ろうとしています。

    jqueryを使ってポップアップを作ろうとしています。 アイコンにマウスオーバーでポップアップ表示、ポップアップの×をクリックしてポップアップ削除という動きまではできています。 しかしマウスオーバーのアイコンはul liの中にあるのに、ポップアップはulの外に置かれているため、thisが使えず、アイコンにマウスオーバーすると全てのポップアップが表示されてしまいます。 これをマスウオーバーしたアイコンのポップアップのみ表示できるようにしたいです。 下記にソースになります。表示させたいのはアイコン02にカーソルを合わせた場合のみになります。 よろしくお願いいたします。 JS ---------------------------------------------------------------- $(function(){ $(".popup").hide(); $(".box ul li.icon02").mouseover(function(){ $(".popup").fadeIn("fast").css({ top:10+"px", left:-95+"px"}); }); $(".popup img.closed").click(function(){ $(".popup").fadeOut("fast"); }); }); html ---------------------------------------------------------------- <div class="box"> <div class="boxIn"> <ul> <li class="ico01"><a href="#"><img src="アイコン1url" /></a></li> <li class="ico02"><a href="#"><img src="アイコン2url" /></a></li> <li class="ico03"><a href="#"><img src="アイコン3url" /></a></li> </ul> <!--▼pop-up部分--> <div class="popup"> <p>●●<img src="クローズボタンurl" alt="close" width="12" height="12" class="closed" /> </p> <div class="popInner"> <p>ポップアップの中身</p> <!--#popInner--> </div> <!--#popup--> </div> <!--▲pop-up部分ここまで--> <!--#boxIn--> </div> <!--#box--> </div> 以下 <div class="box"> ~~同じ構成要素の繰り返し。

専門家に質問してみよう