IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

erreur méthode non gérée sur l'objet document


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 52
    Points : 39
    Points
    39
    Par défaut erreur méthode non gérée sur l'objet document
    Bonjour,

    Dans un code javscript j'ai la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.all.item(categ).options[i] = null;
    Cette ligne se trouve dans une fonction que j'appelle à deux endroits différents du programme.
    Mon problème est que dans un cas la méthode est exécutée sans difficultés et dans l'autre cas j'ai l'erreur "Cette objet ne gère pas cette propriété ou cette méthode".
    Dans les deux cas j'utilise IE7.

    Je ne comprends pas comment pour un même objet et pour un même navigateur, une méthode peut un coup être géré et un coup ne pas l'être.

    La seul différence que je vois dans ces deux cas est le contenu des variables mais je les ai vérifié et n'ai rien vu de problématique.

    Quelqu'un aurait-il une idée de ce qu'il se passe ?

  2. #2
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    peux tu poster le code complet ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 52
    Points : 39
    Points
    39
    Par défaut
    Voici le code complet de la fonction. Elle permet de lier deux listes déroulantes entre elles.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    /*	
    	Cette fonction est appelée lorsqu'une liste permettant de choisir un type de catégorie est modifié.
    	Elle prend en paramètre :
    	- type_categ : l'ID de la liste contenant les types de catégories
    	- categ : l'ID de la liste contenant les catégories
    	- liaison : le type de liaison, c'est à dire pour quelle action de l'utilisateur la liaison est faite :
    		"interfacecateg" ou  "helpdesk"
     
    	Le code de cette fonction n'est pas dans l'ordre de son exécution car le javascript est en mode asynchrone.
    	La première partie du code (ordre d'exécution) se trouve à la fin et la deuxième partie au début.
    */
    function plugin_categoriesTitre_choix_table(type_categ,categ,liaison) {
    	var xhr = getXhr();
     
    	/* deuxième partie du code */
    	// On défini ce qu'on va faire quand on aura la rdu fichier ouvert dans la première partie
    	xhr.onreadystatechange = function(){
    		// On ne fait quelque chose que si on a tout reçu et que le serveur est ok	
    		if(xhr.readyState == 4 && xhr.status == 200){
    			//on récupère la réponse
    			leselect = xhr.responseText;
     
    			var nom_navigateur = navigator.appName;
     
    			//le code pour traiter la réponse n'est pas le même pour internet explorer et pour d'autres navigateurs comme firefox
    			//IE ne pouvant pas utiliser innerHTML il faut utiliser d'autres fonctions ce qui oblige à adapter le formatage des données
    			if (nom_navigateur == "Microsoft Internet Explorer") {
    				//on commence par séparer les différentes informations reçues
    				tab = leselect.split(":");
    //modif
    alert("la2");
    alert(categ);
    alert(categ.length-1);
    				//on supprime les options qui sont déja dans la liste déroulante
    				for (var i=categ.length-1; i>=0; i--){
    					document.all.item(categ).options[i] = null;
    				}
    //modif
    alert("la3");
    				categ.selectedIndex = -1;
    //modif
    alert("da");
    				//on ajoute les nouvelles options
    				//sur la première ligne du tableau tab on a la valeur de la première option et sur la deuxième ligne on a le text de la première option, ainsi de suite pour les autres lignes et options d'où l'incrémentation de i+2 pour passer à l'option suivante sauf pour le <input ...> qu'on repère par le paramètre hidden et qui contient 3 paramètres
    				var i = 0;
    				while (i<tab.length-1){
    					if (tab[i]=="hidden") {
    						var elem = document.getElementById(categ);
    //modif	
    alert("truc");					
    alert(elem);
    						var iInput = document.createElement("input");
    						iInput.type = tab[i];
    						iInput.name = tab[i+1];
    						iInput.value = tab[i+2];
    						elem.appendChild(iInput);//modif
    alert("ici");
    						i = i+3;
    					} else {
    						var oOption = document.createElement("OPTION");
    				   		oOption.value=tab[i];
    						oOption.text=tab[i+1];
    						document.all.item(categ).add(oOption);
    						i = i+2;
    					}
    				}
    			} else {
    				//Pour firefox et autres on reçoit une <option ...> et un <input ...> tout prêt et on les insères avec la méthode suivante
    				document.getElementById(categ).innerHTML = leselect;
    			}
    		}
    	}
    	/* fin deuxième partie */
     
    	/* première partie du code*/
    	// Ici on ouvre le fichier qui contient le code qui va remplir la liste déroulante des catégories en fonction de la table qui aura été choisie. Le fichier dépend de l'interface sur laquelle se trouve la liste. Le troisième argument de la fonction open indique que le javascript est en mode asynchrone.
    	if ((liaison == "interfacecateg")||(liaison == "interface_suivi_recherche")) {
    		xhr.open("POST","/glpi/plugins/categoriesTitre/inc/plugin_categoriesTitre_listeCategTitre.function.php",true);
    	} else if (liaison == "helpdesk") {
    		xhr.open("POST","/glpi/plugins/categoriesTitre/inc/plugin_categoriesTitre_listeCategEnfant.function.php",true);
    	}
    	// ne pas oublier ça pour le post
    	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
     
    	//on envoie la valeur qui a été sélectionné dans la liste déroulante en fonction de l'interface ou se trouve la liste. Cette valeur est envoyé au fichier qu'on a ouvert précédemment 
    	sel = document.getElementById(type_categ);
    	if ((liaison == "interfacecateg")||(liaison == "interface_suivi_recherche")) {
    		table = sel.options[sel.selectedIndex].value;
    		xhr.send("table_choisi="+table);
    	} else if (liaison == "helpdesk") {
    		//le "t" de parent a été volontairement enlevé car le mettre provoquait l'erreur "Non implémenté \n" avec IE7
    		paren = sel.options[sel.selectedIndex].value;
    		xhr.send("parent_choisi="+paren);
    	}
    	/* fin première partie */
    }

  4. #4
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    ok ok
    je te conseille de regarder ce script pour ajouter des options dans une liste :

    http://javascript.developpez.com/faq...js#SelectListe

    et surtout d'éviter le document.all ;-)

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 52
    Points : 39
    Points
    39
    Par défaut
    Effectivement ca marche beaucoup mieux avec cette méthode.

    Cela dit ca commence à être pénible, c'est la 3e ou 4e méthode que je teste et à chaque fois ca semble marcher jusqu'au moment ou ca ne marche plus. Je commence à comprendre pourquoi IE est tant critiqué.

    Merci pour ton aide.

  6. #6
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    le problème ne vient pas forcément de IE , mais plutôt de la façon dont les objets sont gérés ...
    a l'heure actuelle ( sous IE8 ) il n'y a que peu de différence avec les autres navigateur ^^ ( et non je ne suis pas pro IE )

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 52
    Points : 39
    Points
    39
    Par défaut
    "La façon dont les objets sont gérés" ?
    Peut tu préciser ? Parce que là j'aurais plutôt tendance à penser que cette façon dépend des navigateurs.

    Tant mieux si IE8 gère mieux les standards (si j'ai bien compris). Malheureusement pour moi le projet sur lequel je travaille ne fonctionnera pas sous IE8 avant un moment, contraintes d'entreprise oblige.

  8. #8
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    Les objets sont identique sous tous les navigateurs
    ce qui change , ce sont les objet DOM et les CSS

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur : propriété ou méthode non gérée par l'objet
    Par Ptikir dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/09/2009, 16h31
  2. Erreur 438 propriété ou méthode non gérée par cet objet
    Par aba_tarn dans le forum VBA Access
    Réponses: 0
    Dernier message: 22/02/2008, 11h30
  3. Propriété ou méthode non gérée par cet objet
    Par abennis dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/06/2007, 17h59
  4. propriété ou méthode non gérée par cet objet
    Par Elstak dans le forum VBA Access
    Réponses: 2
    Dernier message: 27/05/2007, 21h23
  5. Erreur:Propriété ou méthode non gérée par cet objet.
    Par nodogeid dans le forum VBA Access
    Réponses: 2
    Dernier message: 22/05/2007, 17h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo