Firefox compatibility

S

Serena

I have a problem whit this script. It is compatible with IE but isn't with
Firefox.

The error are:
1) "e has no properties" at-----> "if(e.pageX || e.pageY) {"
2) "document.getElementById()" at------>
"popText0.style.visibility="visible"
Help me please
Serena

//
// MOUSE position
//

var posX = 0;
var posY = 0;

function setPos () {
posX = 0;
posY = 0;

if (!e)
var e = window.event

if (e.pageX || e.pageY) {
posX = e.pageX
posY = e.pageY
}

else if (e.clientX || e.clientY) {
posX = e.clientX + document.body.scrollLeft
posY = e.clientY + document.body.scrollTop
}

return
}

document.onmousemove = setPos;


//
// MENU'
//

var popShow = new Array (false, false, false);

function popup (who) {
popText0.style.visibility = "hidden";
popText1.style.visibility = "hidden";
popText2.style.visibility = "hidden";

topbutton0.style.visibility = "visible";
topbutton1.style.visibility = "visible";
topbutton2.style.visibility = "visible";


if (!popShow[who]) {
if (( who == 0 ) || ( who == 1 ))
{
eval("popText"+who+".style.left = posX + 10");
eval("popText"+who+".style.top = -38");
}
else
{
eval("popText"+who+".style.left = posX + 10");
eval("popText"+who+".style.top = -38");
}
eval("popText"+who+".style.visibility = \"visible\"");

for(var count in popShow)
popShow[count] = false;

popShow[who] = true;
eval("topbutton"+who+".style.visibility='hidden'");
}
else
popShow[who] = false;

return;
}
 
L

Laurent Bugnion [MVP]

Hi,

Gérard Talbot said:
Serena wrote :

posX and posY were set to 0 globally. Why do they need to be reset
again, and this time, locally?

Because they are global. Further in the function they are set to a
value. Since we don't know when (and how often) the function will be
called, resetting them to 0 might be necessary.

The code could be much more modular, object-oriented, and that would
remove the need for global variable.
This will fail in Firefox and other DOM 2 event interface compliant
browsers. event is not a properties of the window.
You need to register an event listener on the targeted object.

That's probably what she did somewhere in the code which she doesn't
show us. For example, if you have

document.onload = setPos;

then you should declare the function like this:

function setPos( e )
{
...
}

Mozilla-based browsers pass the event details to the function when the
event handler is called. I always found this way of doing confusing and
for once prefer the IE way.

Maybe a better way is to go the other way round:

function setPos( e )
{
if ( window.event )
{
e = window.event;
}

if ( !e )
{
throw "Unknow platform";
}
}

HTH,
Laurent
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,982
Messages
2,570,186
Members
46,740
Latest member
JudsonFrie

Latest Threads

Top