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 :

[DOM] innerHTML dans un select sous IE.


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 66
    Points : 64
    Points
    64
    Par défaut [DOM] innerHTML dans un select sous IE.
    Bonjour,

    J'ai un bout de code, qui fonctionne parfaitement sous Firefox, et qui ne fonctionne pas sous IE.

    Le bout de code, met a jour un select en fonction d'une reponse du serveur.
    J'utilise l'objet Ajax de prototype.

    Le probléme :

    Le select ne se met pas a jour sous IE, et se met bien a jour FF.
    Le select, si je le transforme en div ( si je met une balise div a la place de select ), se met bien a jour


    Voici la fonction qui plante, en gras la partie qui nous interesse :

    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
    function getList()
    {
    	
    	cleanDiv('lselect');
    	showLoadingDiv();
    	
    	var lresultid= getResultId();
    	
    	new Ajax.Request(
    	'<?php echo url_for( 'module/action', true)?>',
    		{
    			method: 'get',
    			parameters: {id: lresultid},
    			onSuccess: function(xmlhtt) { $('lselect').innerHTML=xmlhtt.responseText;hideLoadingDiv(); },
    			onFailure: function(){ alert('fail'); }
    		}//
    	);
    }
    A titre d'info, voici la fonction cleanDiv ( qui vide un div de ses elements, et qui fontionne )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function cleanDiv( divid )
    {
    	while( $(divid).lastChild )
    	{
    		$(divid).removeChild( $(divid).lastChild );
    	}
    }
    Quelqu'un aurait une idée ?

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 66
    Points : 64
    Points
    64
    Par défaut
    Aprés avoir compris, que créer un select dynamiquement avec innerHTML, n'etait pas conseillé du tout ( traduction : ne fonctionne pas avec IE )

    j'ai essayé de crééer mon select comme suit :

    Dans la page traitement.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo '$("lselect").options[$("lselect").options.length] = new Option("'.$year -> getDate('Y').'","'.$year -> getKey().'");';
    Dans la fonction d'affichage de la reponse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    eval(xmlhttp.responseText);
    Ceci fonctionne sous firefox, mais pas sous IE...

    Je recherche une méthode qui fonctionne sous les deux...

    si quelqu'un a une idée merci

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 66
    Points : 64
    Points
    64
    Par défaut
    Au cas ou quelqu'un lirait ce post,

    Je continue mes essais .... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    optx = document.createElement('option');
    optx.setAttribute('value','<?php echo $year -> getKey();?>');
    optx.appendChild( document.createTextNode('<?php echo $year -> getDate('Y');?>') );
    $("years").appendChild( optx );

    EDIT :

    Essai suivant ( code généré coté serveur ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    opt = new Option('2002', '81', false, false);
    $("years").options.add( opt );


    Fonctionne sous FF, pas sous IE.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 66
    Points : 64
    Points
    64
    Par défaut
    A titre d'info, j'ai maintenant essayé de passer par JSON depuis que j'ai vu un autre sujet de developpez .... :


    http://www.developpez.net/forums/sho...d.php?t=444966

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    lselect = document.getElementById('years');
    loptions = xmlhtt.responseText.evalJSON();
     
    for( i=0; i < loptions.length; i++ )
    {
    lselect.options.add( new Option( loptions[i].opttext, loptions[i].optid, false, false )  );
    }
    Ce qui est généré par le serveur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [{"opttext":"2002","optid":"81"},{"opttext":"2003","optid":"82"},{"opttext":"2004","optid":"83"},{"opttext"
     
    :"2005","optid":"84"},{"opttext":"2006","optid":"85"}]
    Je trouvais les elements select simple a utiliser.

    Je pense que je vais essayer maintenant de refaire le code sans utiliser de select ( des div avec un comportement similaire au select ... )

    Néanmoins, j'aimerais bien que quelqu'un me dise pourquoi IE plante sur du code correct. et surtout, existe t'il un moyen qu'un code fonctionne sur toutes les versions d'ie sans passer 450 ans a faire un truc idiot...

    maintenant, je vais pleurer un peu, casser un ou deux claviers, et je reposterais une solution... ( si j'en trouve une ... sinon, j'irais casser d'autres hardware... )


  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 66
    Points : 64
    Points
    64
    Par défaut
    La suite ... :

    J'ai finalement créé des divs avec le comportement d'un select. ( div selectable )

    Pour les données serveur, j'ai voulu utiliser JSon ( via prototype ), ça a "evidemment" planté sur IE.

    Finalement,
    XML + DOM sans select = ok sur FF, IE et safari


    Je ne suis pas content d'utiliser DOM + XML, car j'ai remarqué que c'etait plus long sous firefox que l'eval d'une reponse serveur, ou JSON.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 14/10/2010, 14h47
  2. [DOM] Ajout d'option dans un select : sous IE6
    Par ShadowSama dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 23/03/2009, 22h00
  3. Sous requêtes dans un SELECT ??
    Par solp dans le forum Langage SQL
    Réponses: 2
    Dernier message: 22/03/2006, 15h39
  4. [firebird] sous select dans un select
    Par gdido dans le forum SQL
    Réponses: 2
    Dernier message: 14/05/2004, 09h57
  5. select dans un trigger sous Postgresql
    Par kastor_grog dans le forum Requêtes
    Réponses: 1
    Dernier message: 03/09/2003, 17h00

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