HighDots Forums  

Changing <div> width in IE

Javascript JavaScript language (comp.lang.javascript)


Discuss Changing <div> width in IE in the Javascript forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
paul@dark-sky.us
 
Posts: n/a

Default Changing <div> width in IE - 05-23-2008 , 01:42 PM






I have a JS function to change the width of a <div> that works great
in Firefox, but not at all in IE7. In IE an error message occurs:

Line: 92
Char: 5
Error: Invalid Argument
Code: 0

Firefox reports no errors in the Error Console, or Firebug, and the
<div> is resized correctly. Here is the function:

// function to size the tabbed menu background
function sizeTabbedMenu () {
// get screen width so we can set the width of the tabbed
background
var currWidth = parseInt(window.innerWidth);
var newWidth = (currWidth - 150) + 'px'; // subtract side menu
width

// set width of background div
bgEl = document.getElementById('tab_bg');
bgEl.style.width = newWidth;

} // end of function sizeTabbedMenu()

Line 92 in the JS file is the line after bgEl.style.width = newWidth;,
which is actually a blank line. And I have tried using clientWidth
instead of innerWidth, but that made no difference.

The html for the <div> is:

<div id="tab_bg" style="position:absolute; display:inline; background-
image:url('/cq/images/tab_background.png'); background-repeat:repeat-
x; margin-left:-5px; margin-right:-5px; height:30px; vertical-
align:middle; z-index:1;">

Within the <div> are other <div>s with images and text for some tab
styled menu graphics. The <div> is properly closed.

The tabbed menu is in a separate PHP script which includes the
following code:

<?php
// check for $select_tab_id and modify background image accordingly

if (isset ($select_tab_id)) {
$l_side = $select_tab_id . '_left';
$mid = $select_tab_id . '_mid';
$r_side = $select_tab_id . '_right';
echo <<<EOT
<script type="text/javascript" language="javascript">

var tab = document.getElementById('$select_tab_id');
var tab_left = document.getElementById('$l_side');
var tab_mid = document.getElementById('$mid');
var tab_right = document.getElementById('$r_side');

tab_left.src = "/cq/images/left_selected.png";
tab_mid.style.backgroundImage = "url('/cq/images/
mid_selected.png')";
tab_mid.style.backgroundRepeat = "repeat-x";
tab_mid.style.color = "#0033bc";
tab_right.src = "/cq/images/right_selected.png";

// Invoke the function sizeTabbedMenu() (in cq.js) to set
// the width of the div containing the tabbed menu
sizeTabbedMenu();
// Run the sizeTabbedMenu() function when window is resized
window.onresize = sizeTabbedMenu;

</script>


EOT;
}
?>

As a test, I tried the following code on a test page, which did work
in IE:

<script type="text/javascript" language="javascript">
var el = document.getElementById('tab_bg');
el.style.width = '1024px';
</script>

.... so I expect the problem is that newWidth is NULL in IE, but I
don't see why that would be so.

If anyone can take a look at this and figure out why it doesn't work
in IE, I'd appreciate it. Thanks!

Reply With Quote
  #2  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Changing <div> width in IE - 05-23-2008 , 02:13 PM






paul (AT) dark-sky (DOT) us wrote:
Quote:
I have a JS function to change the width of a <div> that works great
in Firefox, but not at all in IE7. In IE an error message occurs:

Line: 92
Char: 5
Error: Invalid Argument
Code: 0

Firefox reports no errors in the Error Console, or Firebug, and the
div> is resized correctly. Here is the function:

// function to size the tabbed menu background
function sizeTabbedMenu () {
// get screen width so we can set the width of the tabbed
background
var currWidth = parseInt(window.innerWidth);
Because the `innerWidth' property is Mozilla-proprietary, the result of the
argument expression is `undefined', and the return value of parseInt() and
later the value of `currWidth' is `NaN'.

Quote:
var newWidth = (currWidth - 150) + 'px'; // subtract side menu
width
Then `newWidth' is assigned "NaNpx" (NaN-150 resulting in `NaN', then
string-concatenated with "px"), ...

Quote:
// set width of background div
bgEl = document.getElementById('tab_bg');
bgEl.style.width = newWidth;
.... and even though you should add runtime feature tests here, MSHTML
correctly complains about an invalid value.

Quote:
[...]} // end of function sizeTabbedMenu()

Line 92 in the JS file is the line after bgEl.style.width = newWidth;,
which is actually a blank line. And I have tried using clientWidth
instead of innerWidth, but that made no difference.
window.clientWidth also yields `undefined' in MSHTML, which a little bit of
debugging on your part, not necessarily including the use of
<http://www.microsoft.com/downloads/details.aspx?FamilyID=2f465be0-94fd-4569-b3c4-dffdf19ccd99>
or <http://www.getfirebug.com/lite.html>, would have revealed.

(window.)document.body.clientWidth and (window.)document.body.offsetWidth work.

RTFM: <http://msdn.microsoft.com/en-us/library/ms533050(VS.85).aspx>

Furthermore, it should be

parseInt(..., 10)

to be sure.

Quote:
The html for the <div> is:

div id="tab_bg" style="position:absolute; display:inline; background-
image:url('/cq/images/tab_background.png'); background-repeat:repeat-
x; margin-left:-5px; margin-right:-5px; height:30px; vertical-
align:middle; z-index:1;"
You really want to use a `style' element or external stylesheet resource to
define this. You have an ID already that you can use for the selector.

Quote:
Within the <div> are other <div>s with images and text for some tab
styled menu graphics. The <div> is properly closed.
However, one wonders what do you hope to accomplish by using a `div' element
which is by default display:block, setting it to display:inline and setting
its `height' property although inline elements can have no assigned height
(their box dimensions are specified by their contents), a somewhat silly
mistake that is only covered by your also setting position:absolute.

And ISTM you are misusing DIV elements while semantically correct
alternatives exist.

Quote:
The tabbed menu is in a separate PHP script which includes the
following code:
Posting server-side code is unhelpful in solving client-side problems, as it
may generate anything or nothing at all to be served to the client.


PointedEars
--
var bugRiddenCrashPronePieceOfJunk = (
navigator.userAgent.indexOf('MSIE 5') != -1
&& navigator.userAgent.indexOf('Mac') != -1
) // Plone, register_function.js:16


Reply With Quote
  #3  
Old   
paul@dark-sky.us
 
Posts: n/a

Default Re: Changing <div> width in IE - 05-23-2008 , 02:41 PM



Thanks Thomas. document.body.clientWidth did the trick!


Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.