Welcome to WebmasterWorld Guest from

Forum Moderators: open

Message Too Old, No Replies

JS Draggable Layer Not working?

Draggable layer not functioning in frames (document.all, document.layer)

5:05 pm on Jan 23, 2003 (gmt 0)

10+ Year Member

Hi. I'm trying to use someone else's JavaScript code to create a draggable layer. Below is the JS/HTML code. Now it all is quite basic and nothing to complicated here but I'm confused and not sure what to do here. The code works great in a single HTML file. But in my case the code needs to be placed in a frame (I know, I know) and I think that is why properties of this code are not working. The draggable layer appears when I click on the specific link but it will not drag nor does it allow me to position the layer when used in frames.

I thought it might have something to do with document.all. I'm not sure how this works in a frame environment.

Any ideas? Any direction to a solution would be greatly appreciated, thanks!

Oh yeah on another note it's my understanding that document.all and document.layer is a proprietary DOM and is not a standard. How could I fix it to be standard supported code but also work in IE and Mozilla?

JS Code

// Script Source: CodeLifter.com
// Copyright 2003
// Do not remove this header


function ddInit(e){
topDog=isIE? "BODY" : "HTML";
whichDog=isIE? document.all.theLayer : document.getElementById("theLayer");
hotDog=isIE? event.srcElement : e.target;
while (hotDog.id!="titleBar"&&hotDog.tagName!=topDog){
hotDog=isIE? hotDog.parentElement : hotDog.parentNode;
if (hotDog.id=="titleBar"){
offsetx=isIE? event.clientX : e.clientX;
offsety=isIE? event.clientY : e.clientY;

function dd(e){
if (!ddEnabled) return;
whichDog.style.left=isIE? nowX+event.clientX-offsetx : nowX+e.clientX-offsetx;
whichDog.style.top=isIE? nowY+event.clientY-offsety : nowY+e.clientY-offsety;
return false;

function ddN4(whatDog){
if (!isN4) return;
if (isHot){
return false;

function hideMe(){
if (isIEŽŽisNN) whichDog.style.visibility="hidden";
else if (isN4) document.theLayer.visibility="hide";

function showMe(){
if (isIEŽŽisNN) whichDog.style.visibility="visible";
else if (isN4) document.theLayer.visibility="show";


here's the html code

<div id="theLayer" style="position:absolute;width:250px;left:100;top:500;visibility:hidden">
<table border="0" width="250" bgcolor="#424242" cellspacing="0" cellpadding="5">
<td width="100%">
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="36">
<td id="titleBar" style="cursor:move" width="100%">
<ilayer width="100%" onSelectStart="return false">
<layer width="100%" onMouseover="isHot=true;if (isN4) ddN4(theLayer)" onMouseout="isHot=false">
<font face="Arial" color="#FFFFFF">Layer Title</font>
<td style="cursor:hand" valign="top">
<a href="#" onClick="hideMe();return false"><font color=#ffffff size=2 face=arial style="text-decoration:none">Close</font></a>
<td width="100%" bgcolor="#FFFFFF" style="padding:4px" colspan="2">
This is where your content goes.<br>
It can be any html code or text.<br>
Remember to feed the reindeer.<br>
Avoid chewable giblet curtains.

9:43 pm on Jan 23, 2003 (gmt 0)

WebmasterWorld Senior Member tedster is a WebmasterWorld Top Contributor of All Time 10+ Year Member

You're right about document.all and document.layers. They're not standard DOM and you're headed for trouble if you cobble something together today that won't be FORWARD compatible when browsers drop their legacy support.

If you want to support both standards and legacy browsers, you will need to begin with good browser sniffing. Then run the standard code for all browsers that support the DOM. Feed your old code ONLY to the antiques.

For instance, you'll find that recent IE will offer backward support for a lot of legacy js, but it will run most standard DOM code as well -- so you're better off sending standard code to every version that will accept it.

The interaction with a frameset does add in some complication as well. I'd suggest looking for different code -- either from another developer who offers their scripts nfree on the web, or you could contract a javascript jockey, or rewrite it yourself from the ground up.

I doubt that any code will let you drag a div from one frame into another. At best, you'll be limited to dragging within the originating frame.

4:46 pm on Jan 24, 2003 (gmt 0)

10+ Year Member

Okay but if I'm not to use document.all and document.layers what am I suppose to use in place of it? At present this is the only way I know of how. Lots of discussion on this issue but I've seen nothing on how to deal with it.

Yes I might have to end up writting something myself. I've just tried using Matt Kruse javascript code for popup layers and issues with that too in frames, this time though it only seems to affect Mozilla. Argh, frustrating.

10:07 pm on Jan 27, 2003 (gmt 0)

10+ Year Member

Can anyone assit me in getting this popup layer to position in Mozilla? I've used code from codelifter.com and code from by Matt Kruse and both do not seem to work in Mozilla. I'm begining to wondering if popup layer positioning actually works in Mozilla or not.

I can post code from Matt Kruse if needed... or if anyone out there replies <G>.