Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Object expected error in Internet Explorer

Tags:

javascript

The code works as it should in Firefox and Chrome.

When the page loads in Internet Explorer, you get the error

User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB6.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; eSobiSubscriber 2.0.4.16; FDM; InfoPath.3) Timestamp: Wed, 18 Aug 2010 13:48:54 UTC

and when you press a link

<a href="javascript:toggleLayer('sub< ? echo $l; ?>');"><? echo $alp[$l]; ?></a> 

you get the error

Message: Object expected
Line: 4
Char: 1
Code: 0
URI:

Message: Object required
Line: 24
Char: 4
Code: 0
URI:

There are no errors in Firefox or Chrome, just IE.

Any help would be appreciated. Here is my code:

function toggleLayer( whichLayer )
{
  var sub=new Array();
  for (i=1;i<25;i++)
  {
  sub[i] = 'sub'+i;
 }
  var elem, vis;
  if( document.getElementById ) // this is the way the standards work
    elem = document.getElementById( whichLayer );
  else if( document.all ) // this is the way old msie versions work
      elem = document.all[whichLayer];
  else if( document.layers ) // this is the way nn4 works
    elem = document.layers[whichLayer];
  vis = elem.style;
  // if the style.display value is blank we try to figure it out here
  

  
  for (i=1;i<26;i++)
 {
   eelem = document.getElementById( sub[i] );
   vvis = eelem.style;
   if(eelem==elem){
    vvis.display = "block";
    } else {
    vvis.display = "none";
    }
 }
 
  if(vis.display==''&&elem.offsetWidth!=undefined&&elem.offsetHeight!=undefined)
    vis.display = (elem.offsetWidth!=0&&elem.offsetHeight!=0)?'block':'none';
  vis.display = (vis.display==''||vis.display=='block')?'none':'block';
}
like image 301
Stephen Woodward Avatar asked Aug 18 '10 13:08

Stephen Woodward


People also ask

What is object expected?

Object expected is IE's way of saying “something is missing or misreferenced” (or, something went wrong and I can't be bothered to tell you what). The line number can't be trusted either. It's probably because your reference to “amounts” or “AMOUNT” is wrong.

What is object error?

The error object is a built-in object that provides a standard set of useful information when an error occurs, such as a stack trace and the error message. For example: Code: var error = new Error("The error message"); console. log(error); console. log(error.


1 Answers

The Problem

The "Object expected"/"Object required" error message in Internet Explorer is rather vague, but it's usually triggered when you are trying to access an attribute of an element which is undefined.

In your case, the undefined element you are probably trying to access is most probably located here :

for (i=1;i<26;i++)
 {
   eelem = document.getElementById( sub[i] ); // <---- UNDEFINED
   vvis = eelem.style; // <----- ERROR
   if(eelem==elem){
    vvis.display = "block";
    } else {
    vvis.display = "none";
    }
 }

The element "eelem" is undefined on the last iteration of the array, because you have previously only initialized the array "sub" with the index 1 to 24. In the last iteration your are trying to access the index 25. So in the last iteration here's what happen :

eelem = document.getElementById( sub[i] );

Is the same as

eelem = document.getElementById( undefined );

Which return undefined to eelem. The error is triggered when you are accessing an attribute of the variable eelem, because undefined does not have attribute.

The Solution

To prevent this from happening you should either initialize the array with the index 1 to 25 or in your second loop, only loop the element 1 to 24.

like image 150
HoLyVieR Avatar answered Sep 30 '22 13:09

HoLyVieR