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 :

[AJAX] IE6/7/8, Marche avec Firefox


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 3
    Points
    3
    Par défaut [AJAX] IE6/7/8, Marche avec Firefox
    Bonjour,

    Je coince sur un problème rencontré sous IE6/7/8.

    Voila le contexte :

    Lors de la saisie d'un formulaire (Jeu Video par exemple), j'ai ajouté un bouton coté d'une liste de société qui créé une popup permettant d'ajouter un élément à cette liste. La popup créé va valider un formulaire (celui de la société) dans une autre popup,la refermer puis rafraichir la liste des société de la page parente en ajax et pour finir ce refermer elle même.

    Tous marche trés bien sous Firefox, mais sous IE j'ai une erreur à un endroit où il ne devrai pas y en avoir.

    Voilà l'erreur : IE s'arrete avec pour erreur du debbugeur javascript : Breaking on JScript runtime error - Cette interface n'est pas prise en charge. sur select.appendChild(option);

    Voila le code :

    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
    function saveFormAjax(type,div) {
    	//popup pour valider le formulaire
    	popup_valid = window.open('about:blank','popup_valid','height=1px,width=1px,scrollbars=yes,menubar=yes') ;
    	document.forms.form_obj.target = 'popup_valid' ;
    	document.forms.form_obj.submit() ;
    	popup_valid.close() ;
     
    	//objet XMLHttpRequest
    	var xhrPopup = getXhr() ;
     
    	//recuperation du select a rafraichir
    	var select = window.opener.document.getElementById(div) ;
     
     
    	xhrPopup.onreadystatechange = function(){
    		if(xhrPopup.readyState == 4 && xhrPopup.status == 200){
    			//recuperation de la liste des options du fichier XML récupéré
    			node_list = xhrPopup.responseXML.getElementsByTagName("root").item(0);
     
    			//recuperation de la liste du formulaire parent
    			var select = window.opener.document.getElementById(div) ;
    			//purge de la liste parente
    			while(select.hasChildNodes()) { 
    				select.removeChild(select.firstChild); 
    			}
    			var i = 0 ;
     
    			//pour chaque node, ajouter l'option correspondante à la liste
    			for(i; i < node_list.childNodes.length; i++){
    				//creation de l'option
    				var option = document.createElement('option');
    				option.value = node_list.childNodes.item(i).getAttribute('value') ;
    				option.appendChild(document.createTextNode(node_list.childNodes.item(i).firstChild.nodeValue));
     
    				//!\\ IE s'arrete ici avec pour erreur : Breaking on JScript runtime error - Cette interface n'est pas prise en charge//!\\
    				select.appendChild(option);
    			}
    		}
    	}
    	xhrPopup.open("POST","index.php?action=adminPopup&refresh_type="+type,true);
    	xhrPopup.setRequestHeader('Content-Type','application/xml;charset=utf-8');
    	xhrPopup.send();
    }
    Le xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0"?>
    <root>
    	<option value="0">Ajouter une société...</option>
    	<option value="1">Activision</option>
    	<option value="2">Zinglinglin</otpion>
    	...etc...
    </root>
    Merci, Half

  2. #2
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    L'erreur est sur quelle ligne?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par DoubleU Voir le message
    L'erreur est sur quelle ligne?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select.appendChild(option);
    J'ai mis un comment au dessus dans le code.

  4. #4
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Mea culpa, j'avais pas vu

    Essaie ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //pour chaque node, ajouter l'option correspondante à la liste
    for(i; i < node_list.childNodes.length; i++){
    	//creation de l'option
            var value = node_list.childNodes.item(i).getAttribute('value');
    	var option = new Option(value, value, false);
            select.options[select.options.length] = option;						
    }

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par DoubleU Voir le message
    Mea culpa, j'avais pas vu

    Essaie ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //pour chaque node, ajouter l'option correspondante à la liste
    for(i; i < node_list.childNodes.length; i++){
    	//creation de l'option
            var value = node_list.childNodes.item(i).getAttribute('value');
    	var option = new Option(value, value, false);
            select.options[select.choix.length] = option;						
    }
    Je suppose que tu voulais dire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select.options[select.options.length] = option;
    Marche sous firefox mais pas sous IE, erreur de IE : Cette objet ne gere pas cette methode ou propriété.

  6. #6
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Oui pardon c'était bien ca. J'edit mon précédent post.

    Ton erreur est étonnante quand meme parce que c'est la syntaxe habituelle que je t'ai donné.

    Ceci marche chez moi sous IE et FF

    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
    <html>
    	<head>
    		<script>
    			function fill(){
    				var select = document.getElementById("select");
    				for (var v=0; v<10; v++){
    					var option = new Option(v, v, false);
    					select.options[select.options.length] = option;	
    				}
    			}
    		</script>
    	</head>
    	<body onLoad="fill()">
    		<select id="select" />
    	</body>
     
    </html>

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par DoubleU Voir le message
    Oui pardon c'était bien ca. J'edit mon précédent post.

    Ton erreur est étonnante quand meme parce que c'est la syntaxe habituelle que je t'ai donné.

    Ceci marche chez moi sous IE et FF

    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
    <html>
    	<head>
    		<script>
    			function fill(){
    				var select = document.getElementById("select");
    				for (var v=0; v<10; v++){
    					var option = new Option(v, v, false);
    					select.options[select.options.length] = option;	
    				}
    			}
    		</script>
    	</head>
    	<body onLoad="fill()">
    		<select id="select" />
    	</body>
     
    </html>
    Cela vient peut être de la définition de select alors...

  8. #8
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	//recuperation du select a rafraichir
    	var select = window.opener.document.getElementById(div) ;
    C'est un vrai select ou c'est une div l'objet que tu récupères?

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par DoubleU Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	//recuperation du select a rafraichir
    	var select = window.opener.document.getElementById(div) ;
    C'est un vrai select ou c'est une div l'objet que tu récupères?
    C'est un vrai select, mais tu mets le doight sur quelquechose d'interessant, mon select me sert juste a avoir une liste deroulante qui lance un JS sur un "onchange", ce select n'a pas de "name", cela pose peut etre problème a IE, j'essai avec un "name" et avec un autre select dans la popup.

    code d'un select concerné :


    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
    <select id="list_mat" style="width: 150px;" onchange="addLiaison(this.options[this.selectedIndex].value,'mat')">
    <option>Ajouter du hardware...</option>
    <option value="142">*****</option>
    <option value="135">aaaB</option>
    <option value="134">aaaB</option>
    <option value="132">aaaBCD</option>
    <option value="161">aze</option>
    <option value="152">aze</option>
    <option value="149">aze</option>
    <option value="146">aze</option>
    <option value="168">azer</option>
    <option value="139">ddrtrtrt</option>
    <option value="133">edf</option>
    <option value="60">GeForce 9600 GT</option>
    <option value="145">qsd</option>
    <option value="140">qsd</option>
    <option value="193">qsdqd</option>
    <option value="184">qsdqds</option>
    <option value="181">qsdsd</option>
    <option value="164">qsqsd</option>
    <option value="176">sdf</option>
    </select>

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Tres interessant j'ajoute ce code HTML a la page parente et a ma popup :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <select id="test">
    <option value="0">Ajouter du hardware...</option>
    <option value="1">toto</option>
    <option value="2">toto</option>
    <option value="3">toto</option>
    <option value="4">toto</option>
    </select>

    Sur la page parent en y accedant par var select = window.opener.document.getElementById('test') ; j'ai la même erreur.

    Dans la popup en y accedant par var select = document.getElementById('test') cela mets la iste dans la popup a jour !

    Pourtant dans les 2 cas, dans le debbugeur JS de IE j'ai bien la methode appendChild sur l'ement select qui existe.

    Cela ressemble un probleme de droit sur la fenetre de parent de IE, peut etre lancer le JS pour rafraichir la fenetre alors sur la fenetre appelante.

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Trouvé !!!

    Le probleme vient en faite du option ! L'option est créé dans la popup et IE est incapable de la déplacer dans l'opener.

    En remplaçant ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var option = document.createElement('option');
    option.value = node_list.childNodes.item(i).getAttribute('value')  ;
    option.appendChild(document.createTextNode(node_list.childNodes.item(i).firstChild.nodeValue));
    select.appendChild(option);
    Par ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var option = window.opener.document.createElement('option');
    option.value = node_list.childNodes.item(i).getAttribute('value')  ;
    option.appendChild(window.opener.document.createTextNode(node_list.childNodes.item(i).firstChild.nodeValue));
    select.appendChild(option);
    Alors, enfin, IE peut mettre l'option dans le select.

    Et merci de t'être penché sur le problème DoubleU et merci aussi a Twidi pour l'avoir résolu .

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

Discussions similaires

  1. [Apache2] Ca marche avec Firefox mais pas avec IE
    Par Barnabo dans le forum Apache
    Réponses: 1
    Dernier message: 15/03/2007, 11h07
  2. [AJAX] Remplissage d'un div avec Firefox
    Par arouze dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/01/2007, 12h28
  3. Réponses: 1
    Dernier message: 12/01/2007, 11h20
  4. Sa marche avec Firefox mais pas avec IE ?
    Par boolat dans le forum Flash
    Réponses: 1
    Dernier message: 30/10/2006, 14h02
  5. [AJAX] Affichage avec Firefox
    Par sarapis dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/05/2006, 16h00

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