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

Bibliothèques & Frameworks Discussion :

Une table qui ne se met pas à jour sous IE [Prototype]


Sujet :

Bibliothèques & Frameworks

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 24
    Points : 16
    Points
    16
    Par défaut Une table qui ne se met pas à jour sous IE
    Bonjour,

    Toujours dans mon soucis de compatibilité entre les différents explorer, je m'aperçois qu'un de mes tableaux ne se met pas à jour alors que sur notre FF tout fonctionne correctement.

    Voici le code JS

    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
    function refreshTable(donnees)
    {
    	alert('donneeeees ' +donnees);
    	var table = document.getElementById('aff_lot'),
    	th = table.getElementsByTagName('thead')[0].getElementsByTagName('th'),
    	array = [], retour = "";
    	for(var i = 0, l = th.length; i < l; i++) {
    		array.push(th[i].innerHTML);
    	}
    	for(var i = 0, l = (donnees.length < 30) ? donnees.length : 30; i < l; i++) {
    	alert(donnees.length);
    		var nb = '';
    			retour = '';
    			donnees.each( 
    		function (reponses)
            {
     
    		retour += "<tr style='text-align:center;'>"	
    		+ '<td>' + reponses.statut + '</td>'
            + '<td>'   + reponses.numero + '</td>'
    		+ '<td>'   + reponses.titre + '</td>'
    		+ '<td>'   + reponses.code_postal + '</td>'
    		+ '<td>'   + reponses.ville + '</td>'
    		+ '<td>'   + reponses.id_loi + '</td>'
    		+ '<td>'   + reponses.montant_pack + '€ </td>'
    		+ '<td>'   + reponses.loyer_lot + '€ </td>'
    		+ '<td>'  + + '-- % </td>'
    		+ '<td>'  + reponses.taux_com+' % '+ reponses.taux_com_unite + '</td>'
    		+ "</tr>";
    		nb++;
    		}
    		);
    	}
    	alert('retour = ' + retour);
    	if(donnees.length > 0) {
     
    	alert(table.getElementsByTagName('tbody')[0].innerHTML);
    	table.getElementsByTagName('tbody')[0].innerHTML = retour;
    	alert(table.getElementsByTagName('tbody')[0].innerHTML);
    	}
    	else { 
    	table.getElementsByTagName('tbody')[0].innerHTML = "<tr><td colspan='10'><p style='font-size:14px; text-align:center; color:midnightblue;'><strong>Aucune réponse ne correspond à votre recherche</strong></p></td></tr>";
    	}
     
    }
    Le alert('retour = ' + retour); renvoie les infos correctes sous IE comme sous FF :S

    les trois lignes suivantes renvoies ce qu'il faut sur FF mais pas sur IE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    alert(table.getElementsByTagName('tbody')[0].innerHTML); // OK 
    table.getElementsByTagName('tbody')[0].innerHTML = retour;
    alert(table.getElementsByTagName('tbody')[0].innerHTML); // Pas d'alerte sous IE


    merci à vous

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Il y a pas mal de petites erreurs de conception dans ton code...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var table = document.getElementById('aff_lot'),
    Si tu utilises Prototype, récupère tes éléments avec $() plutôt que getElementById pour qu'ils puissent être étendus et que tu puisses leur appliquer les méthodes de Prototype.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array = [], retour = "";
    en dehors du fait que array est très maladroit comme nom de variable, il vaut mieux utiliser le mot clé var pour déclarer des variables.
    donnees n'a pas été étendu via $, or IE a une facheuse tendance à perdre la référence à Prototype, donc l'erreur doit venir du fait qu'il ne reconnait pas each comme une méthode de donnees, tu peux parer à cela simplement en redéclarant donnees en début de fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function refreshTable(donnees)
    {
        donnees = $(donnees);
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Merci pour cette réponse mais même après modification, j'ai toujours le même résultat sous IE.

    Non IE ne perd pas les données car elles sont affichées dans un div (pour le test) et elles s'affichent correctement ... Donc je problème ne vient pas de là.

    Je te donne le code MAJ.

    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
     
     
    function refreshTable(donnees)
    {
    	donnees = $(donnees);
    	alert(donnees);
     
    	var table = document.getElementById('aff_lot'),
    	th = table.getElementsByTagName('thead')[0].getElementsByTagName('th'),
    	montableau = [], retour = "";
    	for(var i = 0, l = th.length; i < l; i++) {
    		montableau.push(th[i].innerHTML);
    	}
    	for(var i = 0, l = (donnees.length < 30) ? donnees.length : 30; i < l; i++) {
     
    		var nb = '';
    			retour = '';
    			donnees.each( 
    		function (reponses)
            {		
    		retour += '<tr>'	
    		+ '<td>' + reponses.statut + '</td>'
            + '<td>'   + reponses.numero + '</td>'
    		+ '<td>'   + reponses.titre + '</td>'
    		+ '<td>'   + reponses.code_postal + '</td>'
    		+ '<td>'   + reponses.ville + '</td>'
    		+ '<td>'   + reponses.id_loi + '</td>'
    		+ '<td>'   + reponses.montant_pack + '€ </td>'
    		+ '<td>'   + reponses.loyer_lot + '€ </td>'
    		+ '<td>'  + + '-- % </td>'
    		+ '<td>'  + reponses.taux_com+' % '+ reponses.taux_com_unite + '</td>'
    		+ "</tr>";
    		nb++;
    		}
    		);
    	}
     
    	if(donnees.length > 0) {
    	alert(table.getElementsByTagName('tbody')[0].innerHTML);
    	document.getElementById('affichage').innerHTML = retour;
    	table.getElementsByTagName('tbody')[0].innerHTML = '';
    	table.getElementsByTagName('tbody')[0].innerHTML = retour;
     
    	alert(table.getElementsByTagName('tbody')[0].innerHTML);
    	}
    	else { 
    	table.getElementsByTagName('tbody')[0].innerHTML = "<tr><td colspan='10'><p style='font-size:14px; text-align:center; color:midnightblue;'><strong>Aucune réponse ne correspond à votre recherche</strong></p></td></tr>";
    	}
     
    }
    Sous IE // document.getElementById('affichage').innerHTML = retour; donne la réponse dans le div de la bonne manière ... donc le problème viendrait de l'actualisation du table.

    Merci encore

  4. #4
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Aucune idée ?

  5. #5
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    Si tu utilises prototype, utilise le jusqu'au bout :
    les document.getElementById('xxx') doivent devenir des $('xxx')
    les .innerHTML = 'xxx'; doivent devenir des .update('xxx');
    les .getElementsByTagName('xxx') doivent passer par des .select('xxx');
    etc etc

    Je pense que le problème vient de .innerHTML dans les table et je pense que la méthode update règle le problème, même si le mieux serait de faire ça en DOM.
    on ne dit pas "ça ne marche pas" on dit "je suis incapable de faire fonctionner correctement les outils mis à ma disposition"
    Pas de question technique par MP

  6. #6
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Effectivement, après réalisation de tes explications tout fonctionne.

    Où as-tu appris ça ? Il y a une doc spécifique ? (Fr ou En)


    merci encore

  7. #7
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    Citation Envoyé par Ben86 Voir le message
    Où as-tu appris ça ? Il y a une doc spécifique ? (Fr ou En)
    http://www.prototypejs.org/api
    on ne dit pas "ça ne marche pas" on dit "je suis incapable de faire fonctionner correctement les outils mis à ma disposition"
    Pas de question technique par MP

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

Discussions similaires

  1. ListView dans une boite de dialogue qui ne se met pas à jour
    Par nicofromChina dans le forum Composants graphiques
    Réponses: 5
    Dernier message: 26/03/2012, 11h16
  2. Réponses: 1
    Dernier message: 09/02/2008, 18h55
  3. AJAX - Formulaire qui ne se met pas à jour
    Par wenijah dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 05/11/2007, 10h31
  4. Réponses: 2
    Dernier message: 05/10/2006, 08h24
  5. Combobox.text qui ne se met pas à jour
    Par davels dans le forum Delphi
    Réponses: 6
    Dernier message: 21/08/2006, 10h29

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