Question

Drop down menu across frame border

Asked by: COBOLdinosaur

I'm using a navigation bar with drop down menus.  The menus sit in a table and get displayed by changing the style display attribute from "none' to "block".

It works fine except when I use a top and bottom frame. If the menu extends into the lower frame it sits under the frame instead of on top.

If there is no simple way of doing it, I can live with out the frames, but the page looks better with frames.

It only has to work in IE because thats all that they use on the target intranet.

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2000-05-27 at 17:13:42ID10361046
Tags

across

,

down

,

menu

,

drop

,

frame

Topic

JavaScript

Participating Experts
4
Points
75
Comments
22

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. To Frame or Not To Frame?
    That is the question. I will pay a bounty of 50 points for each expert that will provide me with unique information that I can use to either support or dissuade the use of frames. I'm looking for URLs that discuss this issue…the pros and/or cons. I have a Friday noon (CST)...
  2. frames
    I want this frame layout. I have done this but what happens is body is scrolllable and all are viewd on the screen so even though footer in least important it stays on screen and body is scrolled. ********************* * HEADER * ******************...

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: djbusychildPosted on 2000-05-27 at 21:06:39ID: 2854862

well, say you have this:

-----------
<html>
<frameset rows=100,*>
<frame name=top src=test4.html>
<framee name=bottom src=test5.html>
</frame>
</html>
--------------

--- test4.html ---
<html>
<head>
<script>
function showMenu(framename,id){
 if (document.all){
  framename.document.all[id].style.visibility="visible";
 }
 else{
  framename.document.layers[id].visibility="show";
 }
}
</script>
</head>
<body>
<a href=# onmouseover=javascript:showMenu(top.bottom,"menu1");>menu 1</a>
</body>
</html>

--- test5.html ---
<html>
<body>
<div id="menu1" style="position:absolute;background-color:black;visibility:hidden;">
menu itme1<br>
menu itme2<br>
menu itme3<br>
</div>
</body>
</html>

-----

basically you have your menu on the other side of the frame and you control it from the top frame.

so you get the idea... the above is not a great script, but just shows what you could do to manipulate layers across frames

slim

 

by: dog42Posted on 2000-05-28 at 06:04:22ID: 2855444

 djbusychild is right, this is also the quickest and cleanest way to do what you want but it probably won't give the look you want.

  Another option is to split the menu in two and have part appear in both frames.  The code for this however would be very messy unless you know the exact appearance and location of the menu. It would also only look right if the frameborder is set to 0.

  Can you make the intranet upgrade to IE5.5?  If so, this version has a new function called createPopup() which has support for going over frames, (and also iFrames which used to always appear on the top most z-index).  IE5.5 is still beta and microsoft haven't confirmed how this function works, but at the minute this is how it would be done:

 <script language="JScript">
  function showMenu(height,width,left,top,contentname){
   var oPopup = window.createPopup();
   var oPopBody = oPopup.document.body;
    oPopBody.innerHTML = contentname.outerHTML;
   oPopup.show(height, width, left, top, document.body);
  }
 </script>

 Calling showMenu(100,100,120,20,myDiv) would create a popupMenu from a Div called myDiv of width 100, height 100 at 120 pixels from the left and 20 pixels from the top.  This would then flow over the top of any frameborder and over the other framed page.  (It would also flow over the window border if the window is smaller than the menu. I think.)  I cannot test this as I don't have IE5.5

  I would wait and see what becomes of this function when IE5.5 is released to the general pubic and then use it.  If you need to do this now though, use djbusychild's solution as it's easiest.

Dog42

 

by: dog42Posted on 2000-05-28 at 06:12:38ID: 2855459

Sorry, made a few mistakes in my last post.  the correct function would be:

 <script language="JScript">
  function showMenu(left,top,width,height,contentname){
   var oPopup = window.createPopup();
   var oPopBody = oPopup.document.body;
    oPopBody.innerHTML = contentname.outerHTML;
   oPopup.show(left,top,width,height,document.body);
  }
 </script>

The document.body bit in the show() function is the name of the element to where the top and left co-ordinates are relative.  If this isn't put in the co-ords are relative to the top-left corner of the screem.
The menu can also be hidden by using oPopup.hide().

Dog42

 

by: COBOLdinosaurPosted on 2000-05-28 at 08:20:09ID: 2855743

djbusychild, you offer a solution that works, but I already tried something similar and it looked terrible.  It would be usable if the top frame only contained the navigation bar, but it has to take up 250px to hold a logo and couple of other graphics. It ends up with a big gap between the bar and the menus, or I have to move the bar to the bottom of the top frame and the whole thing looks out of balance.

Thanks for trying
COBOLdinosaur

 

by: COBOLdinosaurPosted on 2000-05-28 at 08:25:12ID: 2855757

dog42, even id IE5.5 was available now, it would still take memonths to get the signoffs I need to implement.

It always seems that what I need is in the next release of something.  Maybe I'll release without the frames and wait for IE5.5, but that means adding in all the stuff in the top frame to 6 pages, and they will load slower.

Thanks
COBOLdinosaur

 

by: dog42Posted on 2000-05-28 at 12:53:08ID: 2856314

Could you post the code or even better a link to the pages you have so far?
This would help to see what could be done.

Dog42

 

by: COBOLdinosaurPosted on 2000-05-28 at 14:23:37ID: 2856439

 Sorry dog42, a link is not possible the pages are in a secured area.

Chunks of code I can provide.

  The style sheet contains:

   .toplevel {position:absolute;left:5;top:1}
   .toplevel IMG {cursor:hand;filter:alpha(opacity=20)}
   .menucell { display:none;font-family:arial;font-size:xx-small;
               z-index:10;position:absolute;left:15;top:37;
               background-color:#eeeeee;color:black;
               border-left:5px silver solid;
               border-top:5px silver solid;
               border-right:5px navy outset;
               border-bottom:5px navy outset;cursor:hand}
   .menucell TD {border:1px white solid;
                 border-right:1px silver solid;
                 border-bottom:1xp teal solid}

The buttons for the navigation bar reside in a table thus:


   <TABLE ID="BUTTONBAR" CLASS="toplevel" BORDER=0>
   <TR><TD>
      <IMG SRC="url1.gif" border=0
         onclick="CloseAll(0)"
         onMouseover="this.filters.alpha.opacity=100;MENU(0,1)"
         onMouseout="this.filters.alpha.opacity=20">
      <IMG SRC="url2.gif" border=0
         onclick="CloseAll(1)"
         onMouseover="this.filters.alpha.opacity=100;MENU(1,1)"
         onMouseout="this.filters.alpha.opacity=20">
      <IMG SRC="url3.gif" border=0
         onclick="CloseAll(3)"
         onMouseover="this.filters.alpha.opacity=100;MENU(3,1)"
         onMouseout="this.filters.alpha.opacity=20">
   </TD></TR>
   </TABLE>
   There are actually six of them but you get the idea.

 
The menu blocks sit each in their own table this way
<The left position is adjusted for each block>

   <TABLE ID="Menu1" CLASS="menucell" STYLE="left:230"
          CELLSPACING=5>
      <TR>
         <TD onMouseover="dohover(this,0);CloseAll(3)"
             onMouseout="dohover(this,1)"
             onClick="url, function call or a window.open">
             description
         </TD>
      </TR>
      <TR>
         <TD onMouseover="dohover(this,0);CloseAll(3)"
             onMouseout="dohover(this,1)"
             onClick="could be anything">
             description
         </TD>
      </TR>
      <TR>
         <TD onMouseout="dohover(this,1)"
             onMouseover="dohover(this,0);MENU(7,103)"
             onClick="void(0)">
             open a child menu &nbsp; &nbsp;
             <FONT FACE="webdings">4
             </FONT>
         </TD>
      </TR>
   </TABLE>
 
The child menus are defined the same way

The script contains an array with the menu name (MenuTabs) and an
array of boolean menu status flags (MenuStatus)



      function CloseAll(keeper)
      {
        // This function closes all open menus except for keeper
        // which is normally its parent
         var i=0;
         while (i<MenuStatus.length)
         {
            if ((MenuStatus[i]) && (i!=keeper))
            {
               MenuStatus[i]=false;
               var Mname=document.all[MenuTabs[i]];
               Mname.style.display="none";
            }  
            i++;
         }
      }
         
      function MENU(EL,CLflag)
      {
        // This function opens a menu after closing all other menus
        // except its parent (if it has one)

         var altKEEP = CLflag;
         if (altKEEP==1)
         {
            altKEEP=99;
         }
         else
         {
            if (altKEEP != 0)
            {
               altKEEP = altKEEP-100;
            }
         }
         if (CLflag)
         {
            CloseAll(altKEEP);
         }
         var menu=document.all[MenuTabs[EL]];
         menu.style.display="block";
         MenuStatus[EL]="true";
      }

      function dohover(EL,flg)
      {
         // standard rollover -- highlight on and off
         // as the makes a trip thru the cell
         var locEL=EL.style;
         if (flg==0)
         {
            locEL.border=STDborder;
            locEL.background=STDbgcolor;
            locEL.color=STDtextcolor;
            menuACTIVE=true;
         }
         else
         {
            locEL.border=NORMborder;
            locEL.borderRight=NORMborderR;
            locEL.borderBottom=NORMborderB;
            locEL.background=NORMbgcolor;
            locEL.color=NORMtextcolor;
            menuACTIVE=false;
         }
      }
 

It works fine except it stays in the frame.

The user like the way it looks and responds, but up to now they
have been using it in pages without frames.

Hope this gives you what you need, and thanks for the effort.

COBOLdinosaur

 

by: dog42Posted on 2000-05-28 at 16:45:02ID: 2856695

Right, this will, or should,  work in IE4+.  In bottom frame, add all the menus.  Then add this code to the MENU function, at the end after the rest of the code:

    visibleh = - document.body.clientHeight + menu.offsetTop;
    var menuBot = parent.main.document.all[MenuTabs[EL]];
        menuBot.style.top = visibleh;
        menuBot.style.display="block";

Also, change the hideAll function to:

   function CloseAll(keeper){
    var i=0;

    while(i<MenuStatus.length){
     if ((MenuStatus[i]) && (i!=keeper)){
      MenuStatus[i]=false;
      var Mname=document.all[MenuTabs[i]];
          Mname.style.display="none";

     // This is the added code:

      var MnameBot=parent.main.document.all[MenuTabs[i]];
          MnameBot.style.display="none";
     }
     i++;
    }
   }

This will work for the main menus, I'm not too sure about the subMenus.  These code changes won't allow for the doHover function yet.  I'm still working on how to do this and you have used the 'this' reference which makes it a bit harder the repeat the function in the other frame.

Take a look at http://www.jneill.f9.co.uk/framepopup/frame.htm to see this.  Put the mouse over the broken image icon on the far left (menu1).

This code will adapt automatically if you change the frameheight or the position of the menu.

Hope this helps
Dog42

 

by: dog42Posted on 2000-05-28 at 16:46:59ID: 2856698

Sorry, 'main' in the code above is the name of the bottom frame.

e.g. var MnameBot=parent.main.document.all[MenuTabs[i];

Dog42

 

by: COBOLdinosaurPosted on 2000-05-29 at 05:52:36ID: 2858370

dog42, let me think about this. Adding the menus to the bottom frame adds some load time and creates maintenance issues.  The solution in the link has a minor flaw in the way the bottom entry only highlights half of the cell at a time, but it's solveable.

Let me play with it a little before I accept it as an answer.

thanks

COBOLdinosaur

 

by: dog42Posted on 2000-05-29 at 06:05:27ID: 2858412

Right, I've played about with the code.  take a look at that page again.

http://www.jneill.f9.co.uk/framepopup/frame.htm

Dog42

 

by: dog42Posted on 2000-05-29 at 06:10:46ID: 2858428

The menus are in a .js file and so maintenance isn't a problem anymore.  both frames use the same code and submenus should work correctly.  You can get all the files use from http://www.jneill.f9.co.uk/framepopup/framepopup.zip to look at them offine on your computer.

The menus are in an array and are written to the document by writeMenus().  All you should need to change is the menus in the arrays and the style variables, NORMborder, ect. to what the really are.

Hope this is what you need
Dog42

 

by: COBOLdinosaurPosted on 2000-05-29 at 06:34:38ID: 2858525

Comment accepted as answer

 

by: COBOLdinosaurPosted on 2000-05-29 at 06:34:38ID: 2858526

Thanks dog42.

I've still got some integration to do but overall it will give me what I need.

 

by: dog42Posted on 2000-05-29 at 06:44:43ID: 2858567

Thanks, if you need any more help, just ask.

 

by: knightEknightPosted on 2002-08-29 at 12:29:49ID: 7249871

bored today ... just browsing ...
the link above: http://www.jneill.f9.co.uk/framepopup/framepopup.zip
no longer exists ... does anyone still have this source?
Thanks

 

by: COBOLdinosaurPosted on 2002-08-29 at 12:59:04ID: 7249928

lol.......  That was the first question I ask on this site.  Unfortuantely I don't think the code is around any more.  I'll look and see if it got archived, but I doubt it. We use it for about  3 months, and did not like the limitations imposed by framing so it got tossed in favour of doing it right with dymnamic generation.

The way I got treated in this Q is one of the reason that I decided to stick around and see how much I could learn. :^)

Cd&

 

by: knightEknightPosted on 2002-08-29 at 13:31:24ID: 7249971

Nah, don't worry about it ... if it was that hard to maintain I probably won't use it either -- I was just surprised to see that there was a working solution at all.

I first signed on in June 98, then I totally forgot about the site for 8 months.  When I stumbled on it again, I had them email my username/password to me (I had forgotten that too) and then I asked my first Q and had a similar good experience, so I stuck around :)

 

by: COBOLdinosaurPosted on 2002-08-29 at 14:01:05ID: 7250026

It worked okay.  The problem is that you still have to have layers in the bottom frame to display the menu, so you still end up with have to maintain those pages as well.  it was sort of one of those "gee whiz isn't this a neat trick" that lose its appeal fairly quickly.

Now when I want to go across a frame I just use a select. Zero hassle. The control does what it is designed to do and stays on top... but mostly I just avoid frames, because I can use CSS and scrollable divs to to do much better layout.  

Back then I didn't know hwo to do a lot of the stuff I cna do now, which is a good reason for me to contineu staying to see what I can learn. :^)

Cd&

 

by: knightEknightPosted on 2002-08-29 at 14:04:58ID: 7250035

mee too, I've learned so much here ... and I had a thing or two to learn about EE etiquette back then too.  We won't go there  ;-]

 

by: cool2000IndianPosted on 2003-04-29 at 22:29:39ID: 8425602

Though this seems to be old questions neverthless, please visit the URL below for coding example on this.

http://www.deepakchitnis.com/Techniques/t3.aspx

 

by: knightEknightPosted on 2003-04-30 at 05:44:02ID: 8427595

thanks for the reference :)

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...