Objet attendu d'erreur dans Internet Explorer
Le code fonctionne comme il se doit dans Firefox et Chrome.
Lorsque le chargement de la page dans Internet Explorer, vous obtenez le message d'erreur
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; PC Media Center 6.0; eSobiSubscriber 2.0.4.16; FDM; InfoPath.3)
Timestamp: Wed, 18 Aug 2010 13:48:54 UTC
et lorsque vous appuyez sur un lien
<a href="javascript:toggleLayer('sub< ? echo $l; ?>');"><? echo $alp[$l]; ?></a>
vous obtenez le message d'erreur
De Message: Objet attendu
Ligne: 4
Char: 1
Code: 0
URI:De Message: Objet requis
Ligne: 24
Char: 4
Code: 0
URI:
Il n'y a pas d'erreurs dans Firefox ou Chrome, tout IE.
Toute aide serait appréciée. Voici mon 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';
}
Oh non, un autre exemple de
if (document.all)
; vous êtes toujours à l'appui de très vieux navigateurs comme IE 4 et NN 4?OriginalL'auteur Stephen Woodward | 2010-08-18
Vous devez vous connecter pour publier un commentaire.
Le Problème
La "Objet attendu"/"Objet requis" message d'erreur dans Internet Explorer est assez vague, mais il est généralement déclenchée lorsque vous essayez d'accéder à un attribut d'un élément qui n'est pas défini.
Dans votre cas, l'indéfini de l'élément que vous êtes probablement en train de l'accès est le plus probablement situé ici :
L'élément "eelem" n'est pas défini sur la dernière itération de la matrice, parce que vous avez précédemment seulement initialisé le tableau "sous" avec l'index 1 à 24. Dans la dernière itération votre essayez d'accéder à l'index 25. Ainsi, dans la dernière itération voici ce qui arrive :
Est le même que
Qui renvoie undefined eelem. L'erreur est déclenchée lorsque vous accédez à un attribut de la variable eelem, parce que indéfini n'a pas d'attribut.
La Solution
Pour éviter cela vous devez initialiser le tableau avec l'indice 1 à 25 ou dans votre deuxième boucle, seule boucle de l'élément 1 à 24.
i < 25
, tandis que le second, il esti < 26
. Rendre 25, et vous serez bon.Quelques autres suggestions... N'est pas la peine de boucle deux fois (suivant le tableau des Id entièrement) et de vérifier la valeur de retour de
getElementById()
avant d'essayer de l'utiliser...Il y a aussi une erreur dans cette ligne:
toggleLayer('sub< ? echo $l; ?>')
. Si je ne me trompe pas, vous devez utiliser<?
sans espace entre les deux (ou mieux: ne pas utiliser les balises courtes, mais<?php
).OriginalL'auteur HoLyVieR