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] Chargement de fichiers et affectation d'évenements


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 101
    Par défaut [AJAX] Chargement de fichiers et affectation d'évenements
    Bonjour,

    Je bloque sur une page qui fonctionne ainsi :

    1) chargement de fichiers html externes et affichage dans des div
    2) affectation d'évènements à tous les boutons de class "bouton"

    Ca passe avec IE, mais FF semble ne pas voir les éléments issus des fichiers chargés.


    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
     
    function appelHtml(page, cible) {
     
    	if ( window.ActiveXObject ) var XhrObj = new ActiveXObject("Microsoft.XMLHTTP"); // IE
    	else var XhrObj = new XMLHttpRequest(); // FF
     
    	XhrObj.open("GET", page) ;
     
    	XhrObj.onreadystatechange = function() {
    		if ( XhrObj.readyState == 4 && XhrObj.status == 200 ) 	{
    			document.getElementById(cible).innerHTML = XhrObj.responseText  ;
    		}
    	}
     
    	XhrObj.send(null) ;
     
    }
     
     
    var tab_bouton = document.getElementsByClassName('bouton') ;
    for ( var i = 0 ; i < tab_bouton.length ; i++ ) tab_bouton[i].onclick = ouvreCalque ;
    Sur un alert ( tab_bouton.length ) , FF renvoie 0, IE renvoie 25.


    Quelqu'un a t'il une idée ?

    D'avance merci.

  2. #2
    Expert confirmé

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Par défaut
    Citation Envoyé par olbouss Voir le message
    Quelqu'un a t'il une idée ?
    Tu as un problène de synchronisation. Ton bloc de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var tab_bouton = document.getElementsByClassName('bouton') ;
    peut très bein s'executer avant le retour de ton contenu (C,est probablement ce qui se passe dans FFx).

    Déplace tout ce que tu veux faire au retour du contenu Ajax dans le handler XhrObj.onreadystatechange.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 101
    Par défaut
    Il fallait effectivement attendre que Firefox charge les fichiers.

    J'ai placé des compteurs au chargement des fichiers :


    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
     
     
    var n_calques = 0 ;
    var ntotal_calques = 0 ;
     
    function appelHtml(page, cible) {
     
    	ntotal_calques ++ ;
    	if ( window.ActiveXObject ) var XhrObj = new ActiveXObject("Microsoft.XMLHTTP"); // IE
    	else var XhrObj = new XMLHttpRequest(); // FF
     
    	XhrObj.open("GET", page) ;
     
    	XhrObj.onreadystatechange = function() {
    		if ( XhrObj.readyState == 4 && XhrObj.status == 200 ) 	{
    			document.getElementById(cible).innerHTML = XhrObj.responseText  ;
    			n_calques ++ ;
    		}
    	}
     
    	XhrObj.send(null) ;
     
    }

    et une fonction en fin de page :

    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
     
     
    var actif = window.setInterval("detect_fin_chargement()", 1000) ;
     
    function detect_fin_chargement() {
     
    	if ( n_calques == ntotal_calques ) {
     
    		window.clearInterval(actif) ;
     
    		var tab_bouton = document.getElementsByClassName('bouton') ;
    		for ( var i = 0 ; i < tab_bouton.length ; i++ ) tab_bouton[i].onclick = ouvreCalque ;
     
     
    	}
     
     
    }


    Merci d'avoir jeter un oeil.

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

Discussions similaires

  1. [TClientDataSet] Erreur de chargement du fichier MIDAS.DLL
    Par Manopower dans le forum Bases de données
    Réponses: 10
    Dernier message: 31/08/2016, 14h08
  2. Réponses: 6
    Dernier message: 11/01/2011, 18h07
  3. Chargement de fichier par SQL LOADER
    Par davy.g dans le forum SQL*Loader
    Réponses: 17
    Dernier message: 15/11/2004, 13h08

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