percepts
08-20-2006, 04:13 PM
The problem:
I have an XHTML STRICT page which has some event listeners attached for onload and resize. I'm doing a bit of Javascript DHTML on these events. When a user changes the browser font size, the javascipt function needs to run. Although the TOPMENU DIV gets resized when the font changes size, its not a page resize so the function doesn't get run. I fixed this in IE6 by using a second function which is run onload and sets an event on the div object in the page after its been defined.
Problem is this doesn't work in Firefox.
Mozilla DOM reference says there is no resize event on a DIV so is there a work around to make it work in FIREFOX? i.e. can I force a resize event to happen on a div in firefox or is there some other event I can trap when a user changes the browser font size?
here's my js code: topmenu is what I'm trying to trap the resize event from.
this code is loaded in the head of the page.
function maindiv(){
estartup=document.getElementById("startup");
econtain=document.getElementById("contain");
emain=document.getElementById("main");
etopmenu=document.getElementById("topmenu");
emaincontent=document.getElementById("maincontent");
nopx = document.childNodes ? 'px' : 0;
contw = document.body.clientWidth - 80;
conth = document.body.clientHeight - 80;
if (contw < 0) { contw = 0;}
if (conth < 0) { conth = 0;}
econtain.style.width = contw+nopx;
econtain.style.height = conth+nopx;
if (conth >= 100 + etopmenu.clientHeight) {
emain.style.height = (conth - etopmenu.clientHeight - 100 )+nopx;
}
if (contw >= 172) {
emaincontent.style.width = (contw - 172 )+nopx;
}
estartup.style.visibility = 'hidden';
}
function fsize() {
etm=document.getElementById("topmenu");
if (typeof window.addEventListener != 'undefined')
{
etm.addEventListener("resize", maindiv, false);
}
else if (typeof document.addEventListener != 'undefined')
{
etm.addEventListener("resize", maindiv, false);
}
else if (typeof window.attachEvent != 'undefined')
{
etm.attachEvent("onresize", maindiv); }
else
{
window.alert('Failed to attach an Event Listener\n\n Please Report');
}
}
if (typeof window.addEventListener != 'undefined')
{
window.addEventListener("load", maindiv, false);
window.addEventListener("load", fsize, false);
window.addEventListener("resize", maindiv, false);
}
else if (typeof document.addEventListener != 'undefined')
{
document.addEventListener("load", maindiv, false);
document.addEventListener("load", fsize, false);
document.addEventListener("resize", maindiv, false);
}
else if (typeof window.attachEvent != 'undefined')
{
window.attachEvent("onload", maindiv);
window.attachEvent("onload", fsize);
window.attachEvent("onresize", maindiv);
}
else
{
window.alert('Failed to attach an Event Listener\n\n Please Report');
}
Any clues?
thanks
I have an XHTML STRICT page which has some event listeners attached for onload and resize. I'm doing a bit of Javascript DHTML on these events. When a user changes the browser font size, the javascipt function needs to run. Although the TOPMENU DIV gets resized when the font changes size, its not a page resize so the function doesn't get run. I fixed this in IE6 by using a second function which is run onload and sets an event on the div object in the page after its been defined.
Problem is this doesn't work in Firefox.
Mozilla DOM reference says there is no resize event on a DIV so is there a work around to make it work in FIREFOX? i.e. can I force a resize event to happen on a div in firefox or is there some other event I can trap when a user changes the browser font size?
here's my js code: topmenu is what I'm trying to trap the resize event from.
this code is loaded in the head of the page.
function maindiv(){
estartup=document.getElementById("startup");
econtain=document.getElementById("contain");
emain=document.getElementById("main");
etopmenu=document.getElementById("topmenu");
emaincontent=document.getElementById("maincontent");
nopx = document.childNodes ? 'px' : 0;
contw = document.body.clientWidth - 80;
conth = document.body.clientHeight - 80;
if (contw < 0) { contw = 0;}
if (conth < 0) { conth = 0;}
econtain.style.width = contw+nopx;
econtain.style.height = conth+nopx;
if (conth >= 100 + etopmenu.clientHeight) {
emain.style.height = (conth - etopmenu.clientHeight - 100 )+nopx;
}
if (contw >= 172) {
emaincontent.style.width = (contw - 172 )+nopx;
}
estartup.style.visibility = 'hidden';
}
function fsize() {
etm=document.getElementById("topmenu");
if (typeof window.addEventListener != 'undefined')
{
etm.addEventListener("resize", maindiv, false);
}
else if (typeof document.addEventListener != 'undefined')
{
etm.addEventListener("resize", maindiv, false);
}
else if (typeof window.attachEvent != 'undefined')
{
etm.attachEvent("onresize", maindiv); }
else
{
window.alert('Failed to attach an Event Listener\n\n Please Report');
}
}
if (typeof window.addEventListener != 'undefined')
{
window.addEventListener("load", maindiv, false);
window.addEventListener("load", fsize, false);
window.addEventListener("resize", maindiv, false);
}
else if (typeof document.addEventListener != 'undefined')
{
document.addEventListener("load", maindiv, false);
document.addEventListener("load", fsize, false);
document.addEventListener("resize", maindiv, false);
}
else if (typeof window.attachEvent != 'undefined')
{
window.attachEvent("onload", maindiv);
window.attachEvent("onload", fsize);
window.attachEvent("onresize", maindiv);
}
else
{
window.alert('Failed to attach an Event Listener\n\n Please Report');
}
Any clues?
thanks