...

View Full Version : getelementbyid



jefkaone
07-04-2003, 01:39 PM
Hi everybody, :D

For my first post, i've got a problem with a script wich have to repositioned a layer in by page trought a div balise, all is working great, except with mozilla, my script is this one:



<SCRIPT>

function setLyr(obj,lyr)
{
var newX = findPosX(obj);
var newY = findPosY(obj);
if (lyr == 'testP') newY -= 50;
var x = new getObj(lyr);
x.style.top = newY + 'px';
x.style.left = newX + 'px';
}

function findPosX(obj)
{
var curleft = 0;
if (obj.offsetParent)
{
while (obj.offsetParent)
{
curleft += obj.offsetLeft
obj = obj.offsetParent;
}
}
else if (obj.x)
curleft += obj.x;
return curleft;
}

function findPosY(obj)
{
var curtop = 0;
var printstring = '';
if (obj.offsetParent)
{
while (obj.offsetParent)
{
printstring += ' element ' + obj.tagName + ' has ' + obj.offsetTop;
curtop += obj.offsetTop
obj = obj.offsetParent;
}
}
else if (obj.y)
curtop += obj.y;
window.status = printstring;
return curtop;
}


function getObj(name)
{
if (document.getElementById)
{
this.obj = document.getElementById(name);
this.style = document.getElementById(name).style;
}
else if (document.all)
{
this.obj = document.all[name];
this.style = document.all[name].style;
}
else if (document.layers)
{
if (document.layers[name])
{
this.obj = document.layers[name];
this.style = document.layers[name];
}
else
{
this.obj = document.layers.testP.layers[name];
this.style = document.layers.testP.layers[name];
}
}
}

</SCRIPT>

then, i've got in my page the div element wich is the repair of the layer <div id="positionLayer"> </div> and in body, i write : onload="setLyr(positionLayer,'LayerWhoNeedToBePositionned)", all ok with IE but not Mozilla, what i need more to make it works with mozilla?
:)
thancs for all, ++, jefkaOne.

jefkaone
07-10-2003, 03:22 PM
hi, someone got a idea? :( , ++,jefkaOne.

Kor
07-10-2003, 03:42 PM
maybe you should use for mozilla <layer>and probably <ilayer> instead of <div>... I don't know... but I remember that I have to do that for a similar script in NS4...

jefkaone
07-10-2003, 04:13 PM
hi :), thx for your help,
i tryed but it doesn't work like this. the thing witch is warning me is that if if made a link with the JSfunction, it works on IE like on MOZILLa, but when i use the JSfunction with onload in the body, niet, it doesn't work on MOZILLA :(. :S
++,jefkaone.

Kor
07-10-2003, 04:30 PM
Try than using onload within the function, write somewere inside the script

window.onload = init;
function init() {
setLyr(....,....);
}

and remove onload from the body. It seems the same for me, but maybe Mozilla does not to call a function with arguments directly from onload... I don't have/use Mozilla, so I can not taste, sorry.

beetle
07-10-2003, 04:39 PM
Mozilla has very helpful error reporting. What is it telling you?

Menu: Tools >> Web Developement >> JavaScript console

jefkaone
07-10-2003, 04:50 PM
hi beetle,
thx for the tricks, this console returns me that "positionLayer is not defined"?!, who can i defined it before onLoad? ;) thx.

Kor, like with the windows.init, it doesn't work :(, amlways the same, with IE ok but not with MOZILLA. :(

Kor
07-10-2003, 04:56 PM
is it

onload="setLyr(positionLayer,'LayerWhoNeedToBePositionned)"

exactly what u have written?

'cose here might be a problem

jefkaone
07-10-2003, 05:24 PM
if i made for example a link like this:
<a href="#" onMouseOver="setLyr(this,'layeraffiche');">Position</a>

the layer is positionned on the link ("this"), but if i write the name of a layer in order to named and identified the position: setLyr(positionLayer,'layeraffiche') //positionLayer is :<div id="positionLayer">&nbsp;</div> , mozilla don't understand.

Roy Sinclair
07-10-2003, 06:29 PM
Ah, setLyr expects an object reference as the first parameter which means you should call it like this (when you can't use "this"):

onload="setLyr(document.GetElementById('positionLayer'),'LayerWhoNeedToBePositionned)"


The reason it works in IE is because they pollute the global object space with everything that's given an "id" value.

jefkaone
07-10-2003, 06:36 PM
Originally posted by Roy Sinclair
The reason it works in IE is because they pollute the global object space with everything that's given an "id" value. [/B]

:S:eek: :rolleyes: ;) :thumbsup: :D so baddddddd lol, thx for all, it's now working :), ultimate question, this solution works with all navigators? :D

beetle
07-10-2003, 08:08 PM
document.getElementById() doesn't work for IE4 or NS4.x.

jkd wrote a handy function a while back to abstract this process

function getNode( id )
{
return ( document.layers ) ? document.layers[id] : ( document.getElementById || document.all )( id );
}so, your code would change like this
onload="setLyr(getNode('positionLayer'),'LayerWhoNeedToBePositionned')"

jefkaone
07-11-2003, 09:34 AM
Hi :), for the trick of getElementById, mozilla show me thiserror:

Erreur : uncaught exception: [Exception... "Illegal operation on WrappedNative prototype object" nsresult: "0x8057000c (NS_ERROR_XPC_BAD_OP_ON_WN_PROTO)" location: "JS frame :: http://localhost/hhwomen/menu/chanteuses.php3 :: getNode :: line 49" data: no]

what does it mean? thx, jefkaOne.

Roy Sinclair
07-11-2003, 03:29 PM
It means you've somehow hit a bug in the browser which causes the browser to crash. Try adding an alert into the code and moving it around until you find the spot where the code causes the browser to crash, let us know what that code is and we'll try to get you some alternative code that won't crash the browser.



EZ Archive Ads Plugin for vBulletin Copyright 2006 Computer Help Forum